[Anfänger]ComboBox erstellt Einträge in einer anderen ComboBox

DerSchlangen

Mitglied
Hallo zusammen,
ich stehe einmal wieder am Ende meines (Java-)Wissens.

Ich habe auf meinem Panel 2 ComboBoxes. Mit der ersten möchte ich aus einen vorgegebenen Tabellenpool eine Tabelle wählen. Da jede Tabelle natürlich andere Spaltennamen hat möchte ich das in Combobox2 je nach gewählter Tabelle die entsprechenden Spaltennamen dort zur Auswahl auftauchen. Vorgegeben sind die Spaltennamen für die jeweiligen Tabellen als String Array.
Jetzt meine Frage: Geht das? Kann ich im laufenden Betrieb also wenn das Programm schon läuft den inhalt ändern? Könnt ihr mir bitte mit Codeschnipseln einen Hinweis geben?

Vielen Dank
DerSchlangen
 
erstelle mehrere ComboBoxModels die du je nach dem, was du in der ersten cb auswählst der zweiten als inhalt setzt.
String[] cb2ModelA, cb2ModelB, ...; jcb2.setModel( bedingtes Model);
 
Hier hast du ein Codebeispiel:
Java:
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class UITest {
  
  public static void main(String... args) {
    SwingUtilities.invokeLater(new Runnable() {

      @Override
      public void run() {
        new UITest();
      }
    });
  }
  
  public UITest() {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationByPlatform(true);
    frame.setSize(800, 600);
    
    JPanel mainPanel = new JPanel();
    
    JComboBox<Integer> cb1 = new JComboBox<>(new Integer[]{1, 2});
    cb1.setSelectedIndex(-1);
    DefaultComboBoxModel<String> model2 = new DefaultComboBoxModel<>();
    JComboBox<String> cb2 = new JComboBox<>(model2);
    cb1.addItemListener(new ItemListener() {
      @Override
      public void itemStateChanged(ItemEvent e) {
        if (e.getStateChange() == ItemEvent.SELECTED) {
          if (e.getItem() instanceof Integer) {
            Integer item = (Integer) e.getItem();
            model2.removeAllElements();
            if (item == 1) {
              for (int i = 0; i < 26; i++) {
                model2.addElement(String.valueOf(i + 1));
              }
            } else if (item == 2) {
              for (char c = 'a'; c <= 'z'; c++) {
                model2.addElement(String.valueOf(c));
              }
            }
          }
        }
      }
    });
    
    mainPanel.add(cb1);
    mainPanel.add(cb2);
    
    frame.add(mainPanel);
    
    frame.setVisible(true);
  }
}
 
Zuletzt bearbeitet:

Zurück
Oben