添加按钮到jtable

时间:2012-02-17 01:17:33

标签: java swing jtable jbutton

我搜索了在jtable中添加按钮的教程,并找到了一个类文件,http://tips4java.wordpress.com/2009/07/12/table-button-column/在哪里为按钮设置标签?

      [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]

2 个答案:

答案 0 :(得分:4)

它在表格渲染器和编辑器中根据DefaultTableModel中的数据自动设置。例如,对于表编辑器,代码为:

public Component getTableCellEditorComponent(
JTable table, Object value, boolean isSelected, int row, int column) {
  ...
  editButton.setText( value.toString() );
  editButton.setIcon( null );
  ...
}

其中value是表模型中的值。有关详细信息,请参阅ButtonColumn.java

编辑:由于您要添加4列,因此您应该将行数据更改为

model.addRow(new Object[]{"DATA1", "DATA2", "DATA3", "DELETE"});

以查看第4列上的删除按钮。

答案 1 :(得分:-1)

    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;
    }
}

}

相关问题