java tableeditor,定制JTable CellEditor使单元格显示不同控件

1.JTable的单元格默认是显示文本的;

2.如要某一列是JCheckBox,需要在model中定义该列的type为Boolean.class,

tblEvent.setModel(new DefaultTableModel(headerArray, 0)

{

@Override

public Class> getColumnClass(int columnIndex)

{

if(columnIndex==7)

{

return Boolean.class;

}

else

{

return Object.class;

}

}

@Override

public boolean isCellEditable(int row, int column)

{

return column==7;

}

});

或者通过设置

tblX.getColumnModel().getColumn(x).setCellEditor(new JCheckBox())

3.如要某一列是JComboBox,需要设置:

JComboBox cbX = new JComboBox(new String[]{"item1","item2"});

tblX.getColumnModel().getColumn(x).setCellEditor(new DefaultCellEditor(cbX));

如要根据每行内容的不同,使得组合框显示不同的候选项,可以通过:

tblEvent.addMouseListener(new MouseAdapter()

{

@Override

public void mousePressed(MouseEvent evt)

{

JTable t = (JTable) evt.getSource();

int c = t.getSelectedColumn();

logger.info("column=" + c);

if (c == 7)

{

EventInfoDTO event = (EventInfoDTO) t.getValueAt(t.getSelectedRow(), 0);

logger.info("eventId=" + event.getEventId());

switch (event.getEventId())

{

case 1:

case 2:

case 3:

String[] action1 = new String[]

{constBundle.getString("log")};

cbActions.setModel(new DefaultComboBoxModel(action1));

break;

case 4:

case 5:

case 6:

case 7:

String[] action2 = new String[]

{constBundle.getString("log"), constBundle.getString("warn"), constBundle.getString("disconnect")};

cbActions.setModel(new DefaultComboBoxModel(action2));

break;

case 8:

String[] action3 = new String[]

{constBundle.getString("log"), constBundle.getString("warn"), constBundle.getString("lock")};

cbActions.setModel( new DefaultComboBoxModel(action3));

break;

default:

logger.error(event.getActionId() +" is an exception action id.");

break;

}

}

}

});

如要在组合框改变了选择项后,作出其他相应,可以参考如下:

eventModel = (DefaultTableModel) tblEvent.getModel();

eventModel.addTableModelListener(new TableModelListener()

{

@Override

public void tableChanged(TableModelEvent e)

{

int column = e.getColumn();

int row = e.getLastRow();

if (column == 7)

{

System.out.println("column=" + column + ",row=" + row);

eventModel.setValueAt(true, row, 9);

}

}

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java JTable中添加JCheckBox,需要创建一个自定义的TableCellEditorTableCellRenderer。下面是一个简单的例子: ```java import java.awt.Component; import javax.swing.AbstractCellEditor; import javax.swing.JCheckBox; import javax.swing.JTable; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; public class CheckBoxCellEditorRenderer extends AbstractCellEditor implements TableCellEditor, TableCellRenderer { private static final long serialVersionUID = 1L; private JCheckBox checkBox; public CheckBoxCellEditorRenderer() { checkBox = new JCheckBox(); checkBox.setHorizontalAlignment(JCheckBox.CENTER); } @Override public Object getCellEditorValue() { return checkBox.isSelected(); } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { checkBox.setSelected((Boolean) value); return checkBox; } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { checkBox.setSelected((Boolean) value); return checkBox; } } ``` 然后,在创建JTable时,将该自定义的TableCellEditorTableCellRenderer设置到JTable中的指定列即可,例如: ```java JTable table = new JTable(); table.getColumnModel().getColumn(0).setCellEditor(new CheckBoxCellEditorRenderer()); table.getColumnModel().getColumn(0).setCellRenderer(new CheckBoxCellEditorRenderer()); ``` 这样,第一列就会显示JCheckBox了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值