2010-08-02 80 views
1

我正在通过extendibg AbstractCellEditor类将Jbutton添加到表中。但在按一下按钮,从“开始”文本并没有改变“停止”。这里是我实现的类在表中添加JButton的问题

 public class ButtonEditor1 extends AbstractCellEditor implements  
     TableCellEditor,ActionListener,TableCellRenderer{ 

     JButton btnSTART = new JButton("START"); 
     private JTable table ; 

    public ButtonEditor1(JTable table){ 
    this.table = table; 
    btnSTART.addActionListener(this); 
    } 
public Component getTableCellEditorComponent(JTable table, Object value, 
     boolean isSelected, int row, int column) { 

    return btnSTART; 
} 

public Object getCellEditorValue() { 
    // TODO Auto-generated method stub 

    return btnSTART; 
} 

public void actionPerformed(ActionEvent e) { 
    int row = table.getSelectedRow(); 
    if(btnSTART.getText().equals("START")){ 
     if(row != -1){ 
      btnSTART.setText("STOP"); 
     } 
    }else if(btnSTART.getText().equals("STOP")){ 

     if(row != -1){ 
      btnSTART.setText("START"); 
     } 
    } 
    fireEditingStopped(); 
} 
public Component getTableCellRendererComponent(JTable table, Object value, 
     boolean isSelected, boolean hasFocus, int row, int column) { 
    return btnSTART; 
} 

}

什么我做错了。我有一个模型类需要该列作为JButton并覆盖了方法setValueAt和getValueAt。

回答

2

JTable使用渲染器来显示数据。一旦使用按钮作为编辑器单击单元格,按钮编辑器将在一瞬间被调用,然后该单元格将重新放回呈现模式。所以如果你想改变文字,你可以改变模型中的值。

+0

我现在在模型中设置字符串值而不是按钮,并使用该值渲染按钮标题以及actionPerformed()方法。 – harshit 2010-08-02 15:45:53