Moin,
hier mal ein bissel lauffähigen Code. Die Klasse hat zwei TODOs.
TODO 1: Setze ich die Selektion in der ComboBox wir der Wert nicht in der Tabelle angezeigt. Schein mir ein kleines Überl zu sein, muss wahrscheinlich nur das Model oder den Editor oder so informieren.
TODO 2: Beschreibt das Hauptproblem, ich ändere immer alle Inhalte der ComboBoxen in allen Zeilen der 2. Spalte.
Code:
[Java]
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ScrollPaneConstants;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
public class TableComboBox implements ActionListener{
private static final String[] LIST_SPALTE1 = new String[] {"1-A", "1-B"};
private static final String[] LIST_SPALTE2 = new String[] {"2-A", "2-B"};
private JComboBox box2;
public static void main(String[] args) {
new TableComboBox();
}
public TableComboBox(){
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception e) {
e.printStackTrace();
}
final JFrame frame = new JFrame();
frame.setTitle("TableComboBox");
frame.setSize(400, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.getContentPane().add(getPanel());
frame.setVisible(true);
}
private JPanel getPanel(){
//Boxes
final JComboBox box1 = new JComboBox(new String[] {"Item1", "Item2"});
box1.addActionListener(this);
box2 = new JComboBox(LIST_SPALTE1);
//TODO 1
box1.setSelectedIndex(0);
box2.setSelectedIndex(0);
//Table
DefaultTableModel model = new DefaultTableModel(new String[] {"Spalte1", "Spalet2"}, 2);
final JTable table = new JTable(model);
final JScrollPane scrollPane = new JScrollPane(table, ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
final JPanel panel = new JPanel();
//Columns
final TableColumn spalte1 = table.getColumnModel().getColumn(0);
spalte1.setCellEditor(new DefaultCellEditor(box1));
final TableColumn spalte2 = table.getColumnModel().getColumn(1);
spalte2.setCellEditor(new DefaultCellEditor(box2));
//Panel
panel.setLayout(new BorderLayout());
panel.add(scrollPane, BorderLayout.CENTER);
return panel;
}
@Override
public void actionPerformed(ActionEvent e) {
final String actionComand = e.getActionCommand();
if("comboBoxChanged".equals(actionComand)){
final JComboBox box = (JComboBox)e.getSource();
final String selectedString = (String) box.getSelectedItem();
String[] itemListe = null;
if("Item1".equals(selectedString)){
itemListe = LIST_SPALTE1;
} else {
itemListe = LIST_SPALTE2;
}
//TODO 2
box2.removeAllItems();
for (String string : itemListe) {
box2.addItem(string);
}
}
}
}
[/Java]
Grüße sneakkizzel