Java 向jtable添加按钮
我搜索了关于在jtable中添加按钮的教程,并从中找到了一个类文件,在哪里为按钮设置标签Java 向jtable添加按钮,java,swing,jtable,jbutton,Java,Swing,Jtable,Jbutton,我搜索了关于在jtable中添加按钮的教程,并从中找到了一个类文件,在哪里为按钮设置标签 [code] private void createTable(){ model = new DefaultTableModel(); editorTable.setModel(model); model.addColumn("COL1"); model.addColumn("COL2"); model.addColum
[code]
private void createTable(){
model = new DefaultTableModel();
editorTable.setModel(model);
model.addColumn("COL1");
model.addColumn("COL2");
model.addColumn("ADD");
model.addColumn("DELETE");
model.addRow(new Object[]{"DATA1", "DATA2"});
Action delete = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
editorTable = (JTable) e.getSource();
int modelRow = Integer.valueOf(e.getActionCommand());
((DefaultTableModel) editorTable.getModel()).removeRow(modelRow);
}
};
ButtonColumn bc = new ButtonColumn(editorTable, delete, 3);
bc.setMnemonic(KeyEvent.VK_D);
}
[/code]
它是在表格渲染器和编辑器中根据DefaultTableModel中的数据自动设置的。例如,对于表编辑器,代码为:
public Component getTableCellEditorComponent(
JTable table, Object value, boolean isSelected, int row, int column) {
...
editButton.setText( value.toString() );
editButton.setIcon( null );
...
}
其中value
是表格模型中的值。有关详细信息,请参阅
编辑:因为要添加4列,所以可能应该将行数据更改为
model.addRow(new Object[]{"DATA1", "DATA2", "DATA3", "DELETE"});
以查看第4列上的删除按钮
MyClass myClass = new MyClass();
jTable1.getColumnModel().getColumn(0).setCellEditor(myClass);
jTable1.getColumnModel().getColumn(0).setCellRenderer(myClass);
class MyClass extends AbstractCellEditor implements TableCellEditor, TableCellRenderer
{
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
{
JPanel panel=(JPanel)jTable1.getCellRenderer(row, column).getTableCellRendererComponent(table, value, isSelected, isSelected, row, column);
panel.setBackground(table.getSelectionBackground());
return panel;
}
@Override
public Object getCellEditorValue()
{
return null;
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
AbstractAction action = new AbstractAction()
{
@Override
public void actionPerformed(ActionEvent e)
{
JOptionPane.showMessageDialog(rootPane,"Row :"+jTable1.getSelectedRow()+" "+ e.getActionCommand() + " clicked");
}
};
JButton button1 = new JButton(action);
JButton button2 = new JButton(action);
button1.setText("Button1");
button2.setText("Button2");
JPanel panel = new JPanel();
panel.add(button1);
panel.add(button2);
panel.setBackground(table.getBackground());
return panel;
}
}
}看看这里:你是否查看了关于JTable的oracle java教程:查看了渲染器和编辑器Binyamin,谢谢你的回答,我实现了这个类,它工作正常,但我没有找到在哪里添加按钮标签。谢谢,Kaka,我看到了代码,它是editorValue。如果我想删除标签的名称,我应该在哪里更改?+1以理解博客条目:)正如博客所说
您将文本(或图标)存储在TableModel中,ButtonColumn将在按钮上呈现文本(或图标)
。因此,向TableModel添加文本字符串的方式与向模型添加其他文本字符串的方式相同,只是呈现方式不同。博客条目中的代码可能存在问题:它不能用于多个“按钮列”。它只允许选择一个将作为按钮呈现的列。存在多个问题,f.i.a)cellEditor实现无效:它必须在终止时通知侦听器b)始终创建新组件c)假设默认呈现器的类型为JPanel d)。。。