[英]JTable with JComboBox as editor - removing current row
我想實現一個JTable
,它有一個列, JComboBox
作為編輯器。 我希望我的表最初只有一行。 在ComboBox
設置值后,我希望我的表中填充一些值,具體取決於JComboBox
選定元素。 選擇非空元素后,我想向表中添加新行。 當有多個行不為空且有人將第n個組合框的值設置為空時,我想從表中刪除該行。
簡單的解決方案不起作用:
TableColumn column = table.getColumnModel().getColumn(2);
JComboBox comboBox = new JComboBox();
comboBox.addItem("");
comboBox.addItem("1");
comboBox.addItem("2");
comboBox.addItem("3");
comboBox.addItem("4");
comboBox.addItem("5");
comboBox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
JComboBox combo = (JComboBox)e.getSource();
if (combo.getSelectedItem() != null) {
if (combo.getSelectedItem().equals("")) {
table.getTableModel().removeRow(table.getSelectedRow());
} else {
table.getTableModel().addRow(new Object[] {null, null, null, null});
}
}
}
});
column.setCellEditor(new DefaultCellEditor(comboBox));
根據mKorbel的建議,只需在TableModel
setValueAt(...)
方法中實現該邏輯。 這是一個簡單的例子:
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
public class Example extends JFrame {
private JTable table;
public Example(){
table = getTable();
add(new JScrollPane(table));
pack();
setVisible(true);
}
private JTable getTable() {
table = new JTable(new DefaultTableModel(3,3){
@Override
public void setValueAt(Object aValue, int row, int column) {
super.setValueAt(aValue, row, column);
if(column == 2){
if(aValue.toString().isEmpty()){
removeRow(row);
} else {
addRow(new Object[] {null, null, null});
}
}
}
});
TableColumn column = table.getColumnModel().getColumn(2);
JComboBox<String> comboBox = new JComboBox<>(new String[]{"","1","2","3","4","5"});
column.setCellEditor(new DefaultCellEditor(comboBox));
return table;
}
public static void main(String[] values){
new Example();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.