WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Erstellen einer uitable

 

lila_gepard
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 29.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.05.2012, 14:38     Titel: Erstellen einer uitable
  Antworten mit Zitat      
Hallo,

ich bin gerade dabei eine GUI zu erstellen, die verschiedene Daten verarbeiten und ausgeben soll. Die Daten sind Informationen über physikalische Größen, die zueinander in Relation gesetzt werden sollen. Dazu sollen die Korrelationen, also Abhängigkeiten, zwischen den verschiedenen Größen von dem Benutzer meiner GUI per Hand in eine Tabelle eingegeben werden können.

Nun ist meine Frage, wie ich diese variable Tabelle erstelle (sie soll je nach Anzahl n der Größen die Form (n x n) besitzen) und wie es möglich ist, dass der Benutzer die Korrelationen dort passend eingibt. Dafür soll er die Korrelation zwischen zwei Größen nur einmal eingeben müssen, d.h. wenn er in der 1. Zeile und in der 2. Spalte einen Wert eingibt, soll die Tabelle diesen Wert automatisch auch in die 2. Zeile und 1. Spalte schreiben, so dass am Ende eine symmetrische Matrix, bzw. Tabelle entsteht. Am Ende sollten alle Werte in einer Matrix gespeichert werden und an das Workspace übergeben werden.

Hat jemand Tipps für mich, wie diese Erstellung funktioniert? Im Moment bin ich so weit, dass ich die Tabelle erstellen kann und der Benutzer seine Daten eingeben kann. Jedoch kann er wahlos Werte in alle Zeilen und Spalten schreiben und die Speicherung der Werte funktioniert auch noch nicht.

Schon mal vielen Dank für jede Hilfe und für die Mühe! Smile

LG
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.05.2012, 22:36     Titel: Re: Erstellen einer uitable
  Antworten mit Zitat      
Hallo lila_gepard,

Wenn Du die relevanten Teile Deines Codes postest, wäre es einfacher Erweiterungen vorzuschlagen. Ohne den Code zu sehen ist es dagegen mit viel Raterei verbunden.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
lila_gepard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 29.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2012, 08:23     Titel:
  Antworten mit Zitat      
Hallo Jan,

Code:
function edit_number_Callback(hObject, eventdata, handles)
% hObject    handle to edit_user_R (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
 
% Hints: get(hObject,'String') returns contents of edit_user_R as text
%        str2double(get(hObject,'String')) returns contents of edit_user_R as a double
number=str2double(get(hObject,'String'));
coefficients=zeros(number,number);
assignin('base',coefficients',coefficients);


set(handles.uitable_dependency,'Visible','On')
set(handles.uitable_dependency,'Data',eye(number));
set(handles.uitable_dependency,'ColumnEditable',[true]);


function uitable_dependency_CellEditCallback(hObject, eventdata, handles)
 sel=eventdata.Indices;
if sel(1,1)==sel(1,2)
   eventdata.EditData=1;
end
evalin('base',coefficients');
coefficients=get(hObject,'Data');
assignin('base',coefficients',coefficients);
 


Also die Tabelle habe ich zu Beginn über Guide erstellt (an der richtigen Stelle) und die Sichtbarkeit auf off gestellt.

Über das Edit-Textfeld wird die Anzahl (number) der Größen eingegeben und anschließend eine quadratische Null-Matrix erstellt.

Anschließend wird die Sichtbarkeit der Tabelle auf on gestellt und ihre Einträge auf die einer Einheitsmatrix verändert.

Danach habe ich versucht, eine eigene Callbackfunktion für die Tabelle zu schreiben. Dabei soll zum Einen beachtet werden, dass die Einträge auf der Hauptdiagonalen immer 1 bleiben sollen und zum Anderen, dass die Werte, die eingetragen wurden, in meiner davor erstellten Matrix gespeichert werden!

Die Matrix wird zwar richtig abgespeichert, jedoch sind die Einträge der Hauptdiagonalen leider noch veränderbar. Weiterhin habe ich keine Ahnung wie man diese Symmetrie der Matrix sicherstellt. Gibt es eine Möglichkeit auf die einzelnen Tabelleneinträge (über die Indizes) zuzugreifen, um diese veränderbar/nicht veränderbar zu setzen und den relevanten Einträgen die gleichen Zahlen zuzuweisen?

Liebe Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.05.2012, 17:33     Titel:
  Antworten mit Zitat      
Hallo lila_gepard,

Die Diagonal-Elemente könntest Du schützen, indem Du den CellSelectionCallback reagieren läßt, wenn ein Diagonal-Element selektiert wird.
Auch das Spiegeln der Eingaben an der Diagonalen ist nicht schwierig. Aber der Transport der Daten per ASSIGNIN und EVALIN ist so fehleranfällig, dass das eigentliche Problem für mich nebensächlich wird. Wenn Du ein zuverlässiges Programm schreiben möchtest, lasse EVAL, EVALIN und ASSIGN grundsätzlich weg. Es gibt immer eine bessere Lösung. Siehe SETAPPDATA, GUIDATA, SET(GCF, 'UserData') oder speichere alle Werte innerhalb der Tabelle, wo sie ja sowieso schon gespeichert sind. Eine doppelte Speicherung führt leichter zu Inkonsistenzen, ohne einen Nutzen zu haben.

Du kann im CelleditedCallback die Zeilen- und Spalten-Indices der bearbeiteten Table-Zelle erhalten. Dann läßt sich auch einfach durch vertauschen der beiden Indices der entsprechende Wert auf der anderen Siete der Diagonalen setzen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.