2012-02-17 5 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

+0

JTable에 대한 Oracle Java 자습서를 확인 했습니까? http://docs.oracle.com/javase/tutorial/uiswing/components/table.html 렌더러 및 편집자를 확인하십시오. – asela38

+0

Binyamin, 응답 해 주셔서 감사합니다. 그것은 잘 작동하지만 버튼에 대한 레이블을 추가 할 위치를 찾지 못했습니다. – FirmView

답변

4

DefaultTableModel의 데이터에서 테이블 렌더러와 편집기에 자동으로 설정됩니다. 예를 들어, 테이블 편집기에 대한 코드는 다음과 같습니다 value이 테이블 모델의 값입니다

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

. 자세한 내용은 ButtonColumn.java을 참조하십시오.

편집 : 당신이 4 열을 추가하고 있기 때문에, 당신은 아마 4 열에서 삭제 버튼을보기 위해

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

에 행 데이터를 변경해야합니다.

+0

고마워요, 카카, 제가 코드를 보았습니다, 그것은 editorValue입니다. 레이블 이름을 DELETE로 변경하려면 어디에서 변경해야합니까? – FirmView

+1

블로그 항목을 이해하는 데 +1 :) 블로그에 'TableModel에 텍스트 (또는 아이콘)를 저장하면 ButtonColumn이 버튼에 텍스트 (또는 아이콘)를 렌더링합니다.'라고 말합니다. 따라서 다른 텍스트 문자열을 모델에 추가하는 것과 같은 방식으로 TableModel에 텍스트 문자열을 추가하면 렌더링 만 다릅니다. – camickr

+0

알았어요. 감사합니다 – FirmView

-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의 무효 인 구현 : 종료시에 청취자에게 통지 할 필요가 있습니다. b) 항상 새로운 컴퍼넌트를 작성합니다. c) 디폴트의 렌더러가 JPanel 형인 것으로 가정합니다. d) ... – kleopatra