A
a guest
Gast
Hallo !! Mein erster Beitrag hier -> Tschuldigung, wenn was nicht passt ...
Habe ein Problem mit dem Update meiner Komponenten bei einem event:
Die Klasse ContentPanel soll 2 Listen in einem JSplitPane darstellen, deren Inhalt sich ändern kann :
Sie ist bei einer Map registriert (mit layer.addOTEventListener(this); ) und soll, bei einem Klick auf diese, Werte aus der Map in eine der Listen (standList) eintragen.
Das funktioniert soweit auch. Durch das Event wird eventHappened() ausgeführt und das ganze Panel nochmal aufgebaut.
Das Problem ist, dass die gewünschten Map-Werte zwar jetzt in der Liste stehen, aber die einzelnen Komponenten
jetzt nicht mehr so funktionieren, wie sie sollen :
- Einträge in der Liste sind nicht mehr selektierbar und auch valueChanged() wird nicht aufgerufen.
(zum Test hab ich festcodiert Einträge in die Liste geschrieben. Wenn noch kein Event ausgelöst wurde und dadurch noch nichts neues in die Liste geschrieben wurde, sind diese selektierbar)
- und wenn ich den Divider beim JScrollPane verschieben will (nach einem Event), sind die Einträge in der Liste verschwunden.
Irgendwas scheint mit dem update der Kompnenten nicht zu klappen.
Muss ich irgendwelche Komponenten (z.B. JSplitPane-Objekt) auch noch als Listener registrieren ?
Wenn ja, dann wie ??
Hoffe auf Hilfe !!
Habe ein Problem mit dem Update meiner Komponenten bei einem event:
Die Klasse ContentPanel soll 2 Listen in einem JSplitPane darstellen, deren Inhalt sich ändern kann :
Sie ist bei einer Map registriert (mit layer.addOTEventListener(this); ) und soll, bei einem Klick auf diese, Werte aus der Map in eine der Listen (standList) eintragen.
Das funktioniert soweit auch. Durch das Event wird eventHappened() ausgeführt und das ganze Panel nochmal aufgebaut.
Das Problem ist, dass die gewünschten Map-Werte zwar jetzt in der Liste stehen, aber die einzelnen Komponenten
jetzt nicht mehr so funktionieren, wie sie sollen :
- Einträge in der Liste sind nicht mehr selektierbar und auch valueChanged() wird nicht aufgerufen.
(zum Test hab ich festcodiert Einträge in die Liste geschrieben. Wenn noch kein Event ausgelöst wurde und dadurch noch nichts neues in die Liste geschrieben wurde, sind diese selektierbar)
- und wenn ich den Divider beim JScrollPane verschieben will (nach einem Event), sind die Einträge in der Liste verschwunden.
Irgendwas scheint mit dem update der Kompnenten nicht zu klappen.
Muss ich irgendwelche Komponenten (z.B. JSplitPane-Objekt) auch noch als Listener registrieren ?
Wenn ja, dann wie ??
Hoffe auf Hilfe !!
Code:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.util.Vector;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import optree.OTEventComponent;
import optree.OTEventListener;
import optree.locale.Messages;
import optree.map.OTEsriLayer;
Code:
public class ContentPanel extends JPanel implements ListSelectionListener, OTEventListener {
private Vector standVector;
private OTEsriLayer layer;
private JPanel contentPanel;
private JPanel mainPanel;
private JLabel label;
private Vector modelVector;
private ListSelectionModel listSelectionModel;
private JList selectedStands;
private JSplitPane splitPane;
private JScrollPane standScroller;
private JScrollPane modelScroller;
private JList standList;
private JList modelList;
public ContentPanel(OTEsriLayer l){
layer = l; // hier steckt eine Map dahinter, die ein Shapefile darstellt
layer.addOTEventListener(this);
standVector = new Vector();
modelVector = new Vector();
setLayout(new BorderLayout());
createContentPanel(null);
}
public void createContentPanel(String entry){
mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
label = new JLabel(Messages.getString("ContentPanel.label"),JLabel.CENTER);
label.setForeground(Color.yellow);
label.setBackground(Color.blue);
label.setOpaque(true);
label.setFont(new Font("Arial Bold", Font.PLAIN, 12));
label.setPreferredSize(new Dimension(70,40));
mainPanel.add("North", label);
standVector.add(entry);
standVector.add("testEintrag");
standList = new JList(standVector);
listSelectionModel = standList.getSelectionModel();
listSelectionModel.addListSelectionListener(this);
listSelectionModel.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
standScroller = new JScrollPane(standList);
modelList = new JList(modelVector);
modelScroller = new JScrollPane(modelList);
splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, standScroller, modelScroller);
splitPane.setOneTouchExpandable(true);
splitPane.setDividerLocation(100);
mainPanel.add(splitPane);
add("North",mainPanel);
revalidate();
}
// javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
public void valueChanged(ListSelectionEvent e) {
ListSelectionModel lsm = (ListSelectionModel)e.getSource();
//usw.
}
public void eventHappened(OTEventComponent e){
String[] entries = layer.getSelectedObjectEntries();
createContentPanel(entries[0]);
}
}