[英]Deletion of JTable row with custom cell editor
我有一个JTable,其中在两列上添加了JButton(删除按钮)和JComboBox作为自定义单元格编辑器。 现在,当我在组合框中选择一个项目并单击“删除”按钮时,所选行将被删除,但已删除行的组合框将呈现在该行上。 我是否还必须从表中删除单元格编辑器。 如果我不选择组合框,则代码工作正常。 请帮我。
这是我的代码的样子:-
class JTableRenderer extends JButton implements TableCellRenderer, TableCellEditor{
private JComboBox sens_type_cb;
@Override
public Component getTableCellRendererComponent(final JTable table, Object value, final boolean isSelected, final boolean hasFocus, final int row, int column) {
if(column == 1)
{
System.out.println("Row " + row);
sens_type_cb = new JComboBox(new String[]{"Radar", "EO", "Aerial", "UAV", "Other"});
return sens_type_cb;
}
}
@Override
public void addActionListener(ActionListener listener)
{
sens_type_cb.addActionListener(listener);
}
@Override
public Component getTableCellEditorComponent(final JTable table, Object value, boolean isSelected, final int row, int column) {
if(column == 1)
{
ActionListener listen = new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
if (table.isEditing())
table.getCellEditor().stopCellEditing();
//table.clearSelection();
}
};
sens_type_cb.addActionListener(listen);
return sens_type_cb;
}
else
return super.getParent();
}
public void addActionListener(ActionListener listener)
{
sens_type_cb.addActionListener(listener);
}
Next I create Class SensorConf in which I create a table:-
public class SensorConf extends javax.swing.JFrame {
private static SensorConf conf_obj = new SensorConf();
/* A private Constructor prevents any other class from instantiating. */
//private SensorConf(){ }
/* Static 'instance' method */
public static SensorConf getInstance( ) {
return conf_obj;
}
Action delete = new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
JTable table = (JTable)e.getSource();
int modelRow = Integer.valueOf( e.getActionCommand() );
((DefaultTableModel)table.getModel()).removeRow(modelRow);
}
};
public void CreateTable()
{
// jTable1.setModel(model);
jTable1.getColumn("S.No.").setPreferredWidth(40);
jTable1.getColumn("Sensor Type").setPreferredWidth(80);
jTable1.getColumn("").setPreferredWidth(40);
jTable1.getColumnModel().getColumn(1).setResizable(false);
jTable1.getTableHeader().setReorderingAllowed(false);
jTable1.setRowHeight(25);
javax.swing.table.DefaultTableModel model = (javax.swing.table.DefaultTableModel)jTable1.getModel();
model.addRow(new Object[]{"", "", "", "", "", ""});
JTableRenderer tableRenderer = new JTableRenderer();
model.getRowCount();
model.setValueAt(new Integer(model.getRowCount()), model.getRowCount()-1,0);
jTable1.getColumnModel().getColumn(1).setCellEditor(tableRenderer);
jTable1.getColumnModel().getColumn(1).setCellRenderer(tableRenderer);
ButtonColumn buttonColumn = new ButtonColumn(jTable1, delete, 6);
}
private SensorConf() {
initComponents();
CreateTable();
}
我在main中实例化了我的类的对象,然后单击表外的“添加”按钮,添加了一个行模型。addRow(new Object [] {“”“”“”“”“”“”“”} ); 到我的桌子。 请帮助我找出我在哪里犯错。 谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.