2012-02-17 151 views
3

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

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

看看这里:http://stackoverflow.com/questions/1475543/how-to-add-button-in-a-row-of-jtable-in-swing- java – MByD 2012-02-17 01:21:29

+0

你检查了关于JTable的oracle java教程:http://docs.oracle.com/javase/tutorial/uiswing/components/table.html检查Renderer和编辑器 – asela38 2012-02-17 01:23:39

+0

Binyamin,谢谢你的回应,我实现了这个类,它工作正常,但我没有找到在哪里添加按钮的标签。 – FirmView 2012-02-17 01:28:18

回答

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列的删除按钮。

+0

谢谢,卡卡,我看到了代码,它是editorValue。如果我想将标签的名称删除,应该在哪里进行更改? – FirmView 2012-02-17 01:46:06

+1

+1了解博客条目:)由于博客说'你在TableModel中存储文本(或图标),并且ButtonColumn将呈现按钮上的文本(或图标)。因此,您将一个文本字符串添加到TableModel,就像您将其他文本字符串添加到模型一样,只有渲染是不同的。 – camickr 2012-02-17 02:17:28

+0

我明白了。谢谢 – FirmView 2012-02-17 02:18:14

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

}

+0

与此有关的多个问题,f.i. a)cellEditor无效实现:它_must_在终止时通知其监听器b)始终创建新组件c)假定默认渲染器是JPanel类型d)... – kleopatra 2013-08-12 09:42:12