JComboBox Binding mit einer Liste

johnbesel

Grünschnabel
Hallo zusammen,

ich versuche gerade mich in Swing einzuarbeiten. Ich arbeite mit NetBeans.

Ich habe ein JFrame mit einem JPanel erstellt.

Dieses Panel beinhaltet unter anderem eine JComboBox, die ich mittels NetBeans an eine List gekoppelt habe:
Java:
    private javax.swing.JComboBox lineComboBox;
    private java.util.List<configurationtool.model.PlcConfLines> plcConfLinesList;
public void init(){
...
 lineComboBox.setName("Linie"); // NOI18N
 
 org.jdesktop.swingbinding.JComboBoxBinding jComboBoxBinding =   
 org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE,   
 plcConfLinesList, lineComboBox);
 
  bindingGroup.addBinding(jComboBoxBinding);
...
}
Das funktioniert ganz gut. Bei der Initialisierung wird die plcConfLinesList mit Werten aus der DB befüllt und sie werden in der Oberfläche angezeigt.

SO jetzt kommt das Problem: Ich habe eine Menüleiste.
In dem Menü habe ich einen Punkt hinzugefügt, um eine neue Linie hinzuzufügen:

private void linesconfigurationMenuItemActionPerformed(java.awt.event.ActionEvent evt) {

String lineName = JOptionPane.showInputDialog(null, "Geben Sie bitte den Namen einer neuen Linie ein",
"Neue Linie anlegen",
JOptionPane.PLAIN_MESSAGE);
PlcConfLines newLine = new PlcConfLines();
newLine.setPlclLineName(lineName);
plcConfLinesList.add(newLine);
}

Im Debugger sehe ich dass die Liste an dieser Stelle um ein Element erweitert wird, ABER meine ComboBox zeigt das neue Element nicht an.
Noch schlimmer, wenn vor dem Erstellen eines neuen Elementes mehr als ein Element in der ComboBox waren, dann wird nur ein Element danach angezeigt (nicht das Neue). Die Elemente werden in die DB gespeichert und ich sehe auch dass das neue Element auch richtig gespeichert wird.

hat jemand eine Idee was ich falsch mache****?
Ich dachte Component Binding sollte einfach funktionieren ohne dass ich die ganze Seite neu Aufbauen muss...

vielen Dank euch
 
Zuletzt bearbeitet von einem Moderator:
Hi und willkommen im Forum!
1. bitte verwende Code-Tags (siehe meine Signatur), das erhöht die Lesbarkeit deutlich! (Syntax Highlighting, korrekte Einrückung, …)
2. Von welcher Linie sprichst du? Ist das einfach ein Objekt, das zu der JComboBox hinzugefügt werden soll?
3. Welche Bibliothek verwendest du (aus der die Pakete org.jdesktop.* kommen)? Was ist PlcConfLines für eine Klasse (Quelle)?

Wenn du eine JComboBox aus einer Liste generierst, dann musst du die JComboBox davon benachrichtigen, wenn du deine Liste veränderst. So wie es aussieht versuchst du das mit der Zeile
Java:
org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding
, aber das funktioniert wohl nicht.
 
Hallo genodeftest,

danke für die schnelle Antwort.

PlcConfLines ist einfach ein Object was eine ID und einen Name beinhaltet.
In der ComboBox werden dann die Namen angezeigt. Die ID's werden von JPA generiert.
Ich habe NetBeans zur Kopplung der JComboBox an die Liste benutzt.
dieser Code wurde von NetBeans generiert.
Java:
org.jdesktop.swingbinding.SwingBindings.createJComboBoxBinding(org.jdesktop.beansbinding.AutoBinding .UpdateStrategy.READ_WRITE, 
plcConfLinesList, lineComboBox);
Ich schätze damit wird die ComboBox an die Liste gebunden.

in einem ActionListener füge ich dann zu dieser Liste ein neues Element hinzu
Java:
String lineName = JOptionPane.showInputDialog(null, "Geben Sie bitte den Namen einer neuen Linie ein",
"Neue Linie anlegen",
JOptionPane.PLAIN_MESSAGE);
PlcConfLines newLine = new PlcConfLines();
newLine.setPlclLineName(lineName);
plcConfLinesList.add(newLine);
}

die ComboBox zeigt aber das neue Element nicht an :(
 
Zurück