Drei Scrollpanes gleichzeitig scrollen

Status
Nicht offen für weitere Antworten.

plavix

Neues Mitglied
Hallo erstmal,
ich hoffe sehr, einer von euch kann mir helfen.
Ich habe drei JLists auf drei JScrollPanes. Ich versuche momentan es so hin zu bekommen, dass wenn ich ein Element der JList anklicke, das automatisch die anderen beiden auf die gleiche Höhe herunter scrollen. Ich habe versucht, in dem SelectionListener der JLists folgendes zu machen:
Code:
secondScrollPane.getVerticalScrollBar().setValue(firstScrollPane.getVerticalScrollBar().getValue());
thirdScrollPane.getVerticalScrollBar().setValue(firstScrollPane.getVerticalScrollBar().getValue());
Das funktioniert auch, solange das nur in einem Listener passiert, wenn ich diesen Befehl dann in dem Listener der zweiten JList ebenfalls ausführen will, springt bei einem Klick die ScrollBar nach ganz oben. Gleiches Problem ensteht auch, wenn ich statt set/getValue(), set/getVisibleAmount() verwende.
Weiß jemand von euch wie dieses Problem entsteht bzw. ich es umgehen kann oder habt ihr vielleicht einen alternativen Lösungsansatz.

LG Alex
 
Vorausgesetzt alle Listen haben die selbe Höhe, funktioniert das da:
Code:
/**
 * Test main method.
 * 
 * @param args ignored
 */
public static void main(String[] args) {
  final JPanel contentPane = new JPanel(new GridLayout(1, 3));

  /* build three lists with identical length */
  final JList list1 = createList();
  final JList list2 = createList();
  final JList list3 = createList();

  /* build the scroll panes to the lists */
  final JScrollPane scroll1 = new JScrollPane(list1);
  final JScrollPane scroll2 = new JScrollPane(list2);
  final JScrollPane scroll3 = new JScrollPane(list3);

  /* add the scroll panes to the content pane */
  contentPane.add(scroll1);
  contentPane.add(scroll2);
  contentPane.add(scroll3);

  /* apply the same model to all scroll panes */
  final BoundedRangeModel scrollModel =
        scroll1.getVerticalScrollBar().getModel();
  scroll2.getVerticalScrollBar().setModel(scrollModel);
  scroll3.getVerticalScrollBar().setModel(scrollModel);

  /* display the scrollable lists in a frame */
  final JFrame f = new JFrame("Synchronized scroll bars");
  f.setContentPane(contentPane);
  f.pack();
  f.setLocationRelativeTo(null);
  f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  f.setVisible(true);
}

private static JList createList() {
  final String[] content = new String[26];
  for (int i = 0; i < content.length; i++) {
    content[i] = Character.toString((char) ('A' + i));
  }
  return new JList(content);
}

Falls nicht, solltest Du am besten eine eigene Implementierung von BoundedRangeModel machen, drei miteinander verbundene Instanzen bilden und diese den ScrollBars zuweisen.

Grüße, Ebenius
 
Danke, das funktioniert super, es hat sogar den Vorteil dass durch das gleiche Model auch das scrollen mit dem Mausrad gleichzeitig erfolgt.
Danke, Danke, Danke
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben