Hallo zusammen,
ich habe folgendes Problem:
Ich möchte gerne in einer Spalte einer JTable eine Kombobox einfügen.
Wenn ich jetzt aber einen Wert einer Kombobox auswähle, ändern sich alle Werte, aber nur beim ersten Mal der Auswahl. Sorry, aber ich stehe im Moment voll auf dem Schlauch...
Irgendwie müsste ich, glaube ich, das komplette Design ändern?!?
Vielen Dank im Voraus!
ich habe folgendes Problem:
Ich möchte gerne in einer Spalte einer JTable eine Kombobox einfügen.
Wenn ich jetzt aber einen Wert einer Kombobox auswähle, ändern sich alle Werte, aber nur beim ersten Mal der Auswahl. Sorry, aber ich stehe im Moment voll auf dem Schlauch...
Irgendwie müsste ich, glaube ich, das komplette Design ändern?!?
Vielen Dank im Voraus!
Java:
import java.awt.Dimension;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.table.DefaultTableModel;
public class ComboTable extends JFrame{
/** Creates a new instance of ComboTable */
Table table;
public ComboTable() {
table = new Table();
JScrollPane scrollPane = new JScrollPane(table);
JPanel panel = new JPanel();
panel.add(scrollPane);
Object [] rowData = {"Column 1","ComboBoxItem"};
DefaultTableModel model = (DefaultTableModel)table.getModel();
model.insertRow(table.getModel().getRowCount(),rowData);
model.insertRow(table.getModel().getRowCount(),rowData);
model.insertRow(table.getModel().getRowCount(),rowData);
model.insertRow(table.getModel().getRowCount(),rowData);
getContentPane().add(panel);
setSize(new Dimension(400,400));
pack();
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public void addRow(){
Object [] rowData = {"Column 1","ComboBoxItem"};
DefaultTableModel model = (DefaultTableModel)table.getModel();
model.insertRow(table.getModel().getRowCount(),rowData);
}
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ComboTable().setVisible(true);
}
});
}
}
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class Table extends JTable{
DefaultTableModel model = new DefaultTableModel();
public Table() {
setModel(model);
model.addColumn("Column 1");
model.addColumn("ComboBox");
String [] items = {"ITEM1","ITEM2"};
getColumn("ComboBox").setCellEditor(new ComboBoxEditor(items));
getColumn("ComboBox").setCellRenderer(new ComboBoxRenderer(items));
setVisible(true);
}
public boolean isCellEditable(int row, int column) {
boolean editable = true;
if(column < 1){
editable = false;//only edit combobox
}
return editable;
}
}
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
public class ComboBoxEditor extends DefaultCellEditor {
JComboBox comboBox;
public ComboBoxEditor(String[] items) {
super(new JComboBox(items));
}
}
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;
public class ComboBoxRenderer extends JComboBox implements TableCellRenderer {
public ComboBoxRenderer(String[] items) {
super(items);
addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e) {
System.out.println(e.getStateChange() == 1 ? getSelectedItem()+"in itemChanged" : "");
}
});
}
public ComboBoxRenderer() {
super();
addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("ComboBox Action Performed");
}
});
}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (isSelected) {
setForeground(table.getSelectionForeground());
super.setBackground(table.getSelectionBackground());
} else {
setForeground(table.getForeground());
setBackground(table.getBackground());
}
// Select the current value
setSelectedItem(value);
return this;
}
}