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

GUI - Zwei Listboxen miteinander "verknüpfen"

 

Martinuk
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 18.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2012, 03:35     Titel: GUI - Zwei Listboxen miteinander "verknüpfen"
  Antworten mit Zitat      
Hallo,

ich benötige für mein GUI 2 voneinander abhängige Listboxen. Nun möchte ich gerne diese beiden mehr oder weniger miteinander verbinden, d.h. wenn ich bei einer der beiden Listboxen scrolle, dann soll die andere auch mitscrollen. Markiere ich einen odere mehrere Einträge einer Listbox, sollen diese auch bei der anderen Listbox markiert werden.

Das "Feature" mit dem gegenseitigen Einträge markieren habe ich bereits durchgeführt, jetzt würde nur noch das mit dem scrollen fehlen. Ich vermute das es irgendwie mit der Eigenschaft 'ListboxTop' funktioniert, habe es allerdings nicht geschafft beide Listboxen zu "synchronisieren".

Hat jemand eine Idee dazu?

Besten Dank
Private Nachricht senden Benutzer-Profile anzeigen


Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 20.08.2012, 23:00     Titel:
  Antworten mit Zitat      
Hey,

gute Frage. Man könnte es über die figure Callbacks realisieren. Soweit ich weiß bietet Matlab keine Möglichkeit die Sliderinformationen der Listbox via Callback abzugreifen.

z.B.
Code:

function figure1_WindowScrollWheelFcn(hObject, eventdata, handles)
if strcmp(get(gco,'Tag'),'listbox1') % tag der "haupt"-listbox
   set(handles.listbox2,'ListboxTop',get(handles.listbox1,'ListboxTop'));% "nebenlistbox" setzen
end

function figure1_WindowButtonMotionFcn(hObject, eventdata, handles)
if strcmp(get(gco,'Tag'),'listbox1')
   set(handles.listbox2,'ListboxTop',get(handles.listbox1,'ListboxTop'));
end

function listbox1_Callback(hObject, eventdata, handles)
set(handles.listbox2,'ListboxTop',get(handles.listbox1,'ListboxTop'));
 


So sollte es in etwa laufen. Ist wohl nicht schön aber in Matlab muss man eben teilweise Umwege gehen.

Greetings
Private Nachricht senden Benutzer-Profile anzeigen
 
Martinuk
Themenstarter

Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 18.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.08.2012, 01:43     Titel:
  Antworten mit Zitat      
Hallo Marco,

danke für deine Antwort und Bemühung. Dein Lösungsvorschlag kommt meiner Vorstellung ziemlich nahe, allerdings mit einer Einschränkung.

Aber mal von vorne.
Also, wenn ich den Balken der "Hauptlistbox (listbox1)" mit der Maus greife und dann nach Belieben nach oben oder unten verschiebe, so verschiebt sich der Balken der "Nebenlistbox (listbox2) sofort und fehlerfrei mit. Genauso sollte es ja sein. Das funktioniert soweit also sehr gut.

Nun das Szenario wenn ich ein Element in der "Hauptlistbox" markiere (selbes Element wird bei mir auch in der 2ten oder Nebenlistbox markiert) und dann die Pfeiltasten (oben/unten) der Listbox klicke, dann wird zwar der Inhalt der "Hauptlistbox" bewegt, nicht aber der Inhalt der "Nebenlistbox". Zumindest nicht sofort, erst wenn ich die Maus bewege (zB. weg von den Pfeiltasten der Hauptlistbox), dann wird die Scrollbar synchronisiert.
Letztlich praktisch nur ein wenn man so will Schönheitsfehler, aber gibt es dazu noch eine Optimierung. Hast du dazu noch eine Idee?

Schöne Grüße.
Private Nachricht senden Benutzer-Profile anzeigen
 
Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 21.08.2012, 10:02     Titel:
  Antworten mit Zitat      
Hey,

ja da hast du recht. Das liegt daran wie oben beschrieben, dass man keine Informationen über die Scrollbar der Listbox abrufen kann wenn diese via drücken auf die Pfeile abrufen kann. Es fehlt hierfür schlicht und einfach die Möglichkeit einen Callback für dieses zu definieren. Weder die figure Callbacks noch die Listbox Callbacks werden abgefeuert. Wenn du dieses machen möchtest müsstest du dich mit Java auseinandersetzen. Z.B. mittels des findjobj M-File vom MFE
Code:

% in deiner opening fcn
set(hObject,'Visible','on')
drawnow
jlist = findjobj(handles.listbox1);
comp = jlist(2).getComponents;
Arrow_Buttons = get(comp(2),'Components');
set(Arrow_Buttons(2),'MousePressedCallback',{@Listbox1_Scrollbar_Callback,hObject})
set(Arrow_Buttons(1),'MousePressedCallback',{@Listbox1_Scrollbar_Callback,hObject})

function Listbox1_Scrollbar_Callback(obj,evd,fig)
handles = guidata(fig);
set(handles.listbox2,'ListboxTop',get(handles.listbox1,'ListboxTop'))

 


Greetings
Private Nachricht senden Benutzer-Profile anzeigen
 
Martinuk
Themenstarter

Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 18.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.08.2012, 03:49     Titel:
  Antworten mit Zitat      
Hallo,

danke für deinen Nachtrag. Ich habe schon gedacht das es auf die Anwendung von Java rauslaufen wird. Soweit ich das beurteilen kann und verstehe stehen die Java-Dinge immer mit "undocumented Matlab" im Zusammenhang.
Was ich damit sagen will ist, ich bin mir nicht ganz sicher ob man/ich auf die Technik zurückgreifen soll.

Dennoch gut zu wissen wie es damit funktioniert.

Schöne Grüße
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.