Verfasst am: 03.03.2012, 16:25
Titel: Objekt erstellen und dessen Eigenschaften ändern
Hallo,
ich möchte gerne in meiner GUI mehrere uipanels erstellen und jeweils deren Attribute verändern können. Um mein Problem besser zu erläutern, habe ich hier ein kleines Beispiel aus meinem mfile:
Zunächst habe ich ein kleines Verständnisproblem. Wenn ich auf meinen Button klicke, dann wird wie gewünscht ein Panel erstellt. Beim nächsten klick wird erneut ein Panel erstellt. Wie kann das sein, dass zwei Objekte offensichtlich den selben Tag besitzen?
Mit einem anderen Button möchte ich nun das Attribut 'Title' ändern:
Wie kann das sein, dass zwei Objekte offensichtlich den selben Tag besitzen?
Sinnvoll ist das sicher nicht. Ich würde aber sagen, dass es in der Verantwortung der Programmiererin liegt, die Tags passend zu wählen.
Willst du denn wirklich ein neues uipanel erstellen, oder was willst du?
Zitat:
Dabei entsteht folgende Fehlermeldung:
??? Error while evaluating uicontrol Callback
??? Reference to non-existent field 'a1'.
Es scheint, dass du GUIDE verwendest. Natürlich speichert GUIDE aber nur die Handles der Elemente, die auch in der .fig-Datei enthalten sind. Wenn du dynamisch neue Elemente erzeugst (womit ich sehr vorsichtig sein würde), musst du selbst sehen, dass die Handles gespeichert werden - z.B. indem du das Handle in die Handles-Struktur hinzufügst.
mein Ziel ist es n verschiedene Objekte und deren Verbindungen zueinander graphisch zu erstellen. Diese Objekte sollen beweglich sein (drag'n'drop) und man soll ihnen Werte zuweisen können (bsp: Objekt1 hat 2 Äpfel, Objekt2 5 Äpfel).
Meine Idee war das folgendermaßen zu realisieren:
- ich erstelle Panels als Objekte
- und Verbindungen mittels annotation('arrow')
Gibt es eine einfachere und sinnvollere Möglichkeit? Kann ich vielleicht solche Objekte über ActiveX Control erstellen?
einfügen und du kannst drag n drop nutzen... Allerdings müsstest du einige Zeit berücksichtigen, die du benötigst um dich mit der Bibliothek auseinander zu setzen. Die Doku ist nicht gerade umfangreich...
Wie eigne ich mir am Besten die Bibliothek an? Habe so etwas noch nicht gemacht und weiß nicht, wie ich einen Überblick zu den Befehlen bekomme.
Es gibt ein Forum auf der Seite wo du das jar File runtergeladen hast. Zudem gibt es dort eine grobe Bedienungsanleitung. Da es sich um Java Programmierung handelt wirst du hier im Forum sicherlich nicht viel Antworten auf deine Fragen bekommen.
Eine Sache kann ich dir dennoch mit aufm Weg geben. Folgendermaßen kannst du ein Callback hinzufügen:
Ich habe damit noch nicht ausgiebig gearbeitet und kann dir darum auch nicht mehr sagen. Nur, dass es besonders für Programmieranfänger ziemlich schwierig sein wird, sich dort zurecht zu finden. Aber wenn man die nötigen Informationen beisamen hat, kann man damit sicherlich einiges machen...
Danke Marco. Arbeite gerade die Anleitung durch. Leider bezieht sich diese nicht auf Matlab und auch sonst findet man dazu nicht viel.
Kannst du mir noch verraten, wie ich beim genannten Beispiel die Variablen graph bzw. parent global einstellen kann. Mit handles hat es leider bei mir nicht funktioniert.
Leider bezieht sich diese nicht auf Matlab und auch sonst findet man dazu nicht viel
Willkommen in der Java Welt. Da siehst du mal wie gut die Dokumentation in Matlab ist. Da ich am überlegen bin ob ich diesen Graph ebenfalls in meiner Software integriere, habe ich mir den Umstand gemacht ein einfaches Beispiel zu erstellen.
Code:
function testGraph
javaaddpath('jgraphx/lib/jgraphx.jar')
function MouseClickedCallback(obj, evd, fig) % MouseClickedCallback
handles = guidata(fig);
SelObj = handles.graphComponent.getCellAt(evd.getX(), evd.getY());
if evd.isMetaDown && ~isempty(SelObj)% Maus rechtsklick und ein Objekt ist gewählt
posX = evd.getX;
posY = evd.getY;
handles.jpopupmenu.show(obj, posX, posY);
handles.jpopupmenu.repaint;
handles.SelObj = SelObj;
guidata(fig,handles) elseif evd.isMetaDown% rechtsklick Maus
posX = evd.getX;
posY = evd.getY;
handles.jpopupmenu.show(obj, posX, posY);
handles.jpopupmenu.repaint;
handles.SelObj = [];
handles.insertPos = [posX,posY];
guidata(fig,handles) end end
function CB_Insert_vertex(obj,evd,fig)
handles = guidata(fig);
if ~isempty(handles.insertPos)
posX = handles.insertPos(1);
posY = handles.insertPos(2);
parent = handles.graph.getDefaultParent();
handles.graph.getModel().beginUpdate;
handles.graph.insertVertex(parent,'','Peter',posX,posY,80,30);
pause(0.2)% wird benötigt für grafisches Update
handles.graph.getModel().endUpdate;
handles.insertPos = [];
guidata(fig,handles) end end
function CB_Delete_object(obj,evd,fig)
handles = guidata(fig);
if ~isempty(handles.SelObj)
handles.graph.getModel().beginUpdate;
handles.graph.removeCells(handles.SelObj);
pause(0.2)% wird benötigt für grafisches Update
handles.graph.getModel().endUpdate;
handles.SelObj = [];
guidata(fig,handles) end end
function CB_View_Page(obj,evd,fig)
handles = guidata(fig);
if handles.graphComponent.isPageVisible
handles.graphComponent.setPageVisible(false) pause(0.2)
handles.graphComponent.repaint;
else
handles.graphComponent.setPageVisible(true) pause(0.2)
handles.graphComponent.repaint;
end end
bekommst du unter anderem alle möglichen Callbacks angezeigt, die du wie oben beschreiben benutzen kannst. Nicht erschrecken die Liste ist lang.
Weitere Fragen zum Graph werde ich nicht beantworten, da gomatlab ein Matlab Forum ist und kein Java Forum. Bitte schaue in den entsprechenden Foren nach Antworten oder probiere es einfach aus. Mit den oben beschreibenen Methoden hast du eine gute Basis dafür.
vielen Dank, dass du dir die Mühe gemacht hast! Genau so ein Beispiel habe ich gesucht!
Leider habe ich es dennoch nicht geschafft per Button (Matlab) ein Vertex zu erstellen, da die variable fig oder graph nicht gefunden werden. Aber ich werde es weiter versuchen
Einstellungen und Berechtigungen
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
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.