JTable 工作过程如下:
当一个表格显示之前,JTable 会询问每个单元格,getCellRender().getTableCellRendererComponent() 得到一个 Swing 组件后,就用它来在指定单元格显示出来。
当某个单元格即将获得焦点,比如单击或键盘tab 移动,JTable 会询问是否目标单元格允许编辑,如果允许就会询问 getCellEditor().getTableCellEditorComponent() 得到一个编辑器,通常,默认的编辑器是一个 JTextField 类型的,只要我们给一个 JButton 类型的就可以了。
table.setCellEditor(new TableCellEditor() {
private JButton editor = new JButton()
private JTextField dephaut = new JTextField()
{//相当于构造函数。
editor.addActionListener() {
/* 业务方法 */
}
}
/* 此处省略 N 多待实现方法*/
public Component getTableCellEditorComponent(
JTable table,
Object value,
boolean isSelected,
int row,
int column) {
if (column == 3) {
return this.editor
} else {
return this.dephaut
}
}
public class NewClass {public static void main(String[] args) {
JFrame frame = new JFrame()
final JTable table = new JTable(4, 4) {
@Override
public TableCellEditor getCellEditor(int row, int column) {
if (row == 1 &&column == 1) {
return new DefaultCellEditor(new JCheckBox())
}
return super.getCellEditor(row, column)
}
@Override
public TableCellRenderer getCellRenderer(int row, int column) {
if (row == 1 &&column == 1) {
return new TableCellRenderer() {
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
return new JCheckBox()
}
}
}
return super.getCellRenderer(row, column)
}
}
frame.getContentPane().add(table, BorderLayout.CENTER)
frame.setDefaultCloseOperation(3)
frame.setVisible(true)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)