2010-07-12 3 views
0

나는 열이 JButton 인 테이블이 있습니다. I 테이블로부터 열을 제거 할 때 렌더러 cellEditor가 클래스테이블에서 Jbutton을 제거하는 방법

class MyRenderer extends JButton implements TableCellRenderer{ 

    public MyRenderer(String text){ 
     super(text); 
    } 
    public Component getTableCellRendererComponent(JTable table, Object value, 
      boolean isSelected, boolean hasFocus, int row, int column) { 
     return this; 
    } 

} 


} 

cellEditor가 클래스

class MultiTradeCellEditor extends DefaultCellEditor{ 

    protected JButton button; 

    public MultiTradeCellEditor(JCheckBox checkBox) { 
     super(checkBox); 
     button = new JButton("Del"); 
     button.setOpaque(true); 
     button.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) {  
      selectionList.getList().remove(table.getSelectedRow()); 
       table.repaint(); 
           } 
     }); 

    } 

} 

있다

TableColumn col = colModel.getColumn(3); 
    col.setCellRenderer(new MyRenderer("Del")); 
    col.setCellEditor(new MultiTradeCellEditor(new JCheckBox())); 

다음

난 렌더러 설정. 나는 model.remove (table.getSelectedRow())를 수행한다. JButton을 제외한 행을 제거합니다. 그 단추가 렌더러 구성 요소의 일부라고 가정하므로 제거되지 않습니다. 어떻게 할 수 있습니까?

답변

2

Table Button Column 예는 버튼뿐만 아니라 테이블로부터 행을 삭제하는 예에 대한 동작 및 렌더러 편집기를 제공한다.

0

홀수 아마도 캐싱 작업일까요?

값이 없을 때 빈 라벨을 반환 하시겠습니까?

class MyRenderer extends JComponent implements TableCellRenderer{ 
    private String text; 
    public MyRenderer(String text){ 
     this.text = text; 
    } 
    public Component getTableCellRendererComponent(JTable table, Object value, 
      boolean isSelected, boolean hasFocus, int row, int column) { 
     if (value) 
      return new JButton(text); 
     else 
      return new JLabel(); 
    } 

} 


} 
+0

예, 있지만 JButton 및 JLabel에 대한 참조를 캐시하고 새 것을 할당하는 대신 매번 동일한 것을 반환합니다. –

+0

@Devon - IDE없이 코딩 할 때 게으르다. :) – willcodejavaforfood

관련 문제