在Renderer中是这样写的 public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if(column == col){
if(value == null){
return null;
}
JButton button = new JButton((String)value);
button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) {
System.out.println("Hello~~~");
}

});
return button;
}
JTable中已经可以看到Button,但是Button没反应,请问如何解决?

解决方案 »

  1.   

    应该是建一个类:
    static class ButtonColumn extends AbstractCellEditor implements TableCellRenderer, TableCellEditor {
    JButton renderButton;
    JButton editButton;
    String text;
    ButtonColumn() {
    renderButton = new JButton();
    editButton = new JButton();
    editButton.setFocusPainted(false);
    } public Component getTableCellRendererComponent(JTable table,
    Object value, boolean isSelected, boolean hasFocus, int row,
    int column) {
    if (hasFocus) {
    renderButton.setForeground(table.getForeground());
    renderButton.setBackground(UIManager
    .getColor("Button.background"));
    } else if (isSelected) {
    renderButton.setForeground(table.getSelectionForeground());
    renderButton.setBackground(table.getSelectionBackground());
    } else {
    renderButton.setForeground(table.getForeground());
    renderButton.setBackground(UIManager
    .getColor("Button.background"));
    } renderButton.setText((value == null) ? "" : value.toString());
    return renderButton;
    } public Component getTableCellEditorComponent(JTable table,
    Object value, boolean isSelected, int row, int column) {
    text = (value == null) ? "" : value.toString();
    editButton.setText(text);
    return editButton;
    } public Object getCellEditorValue() {
    return text;
    }
    }
    ButtonColumn btnCol = new ButtonColumn();
    table.getColumn("321").setCellEditor(btnCol);
    table.getColumn("321").setCellRenderer(btnCol);
      

  2.   

    mouseListener给jtable截了吧。从TableCellRenderer中想也行,不过觉得有一个更简明的方法jTable.addMouseListener(new java.awt.event.MouseAdapter() {
    public void mouseClicked(java.awt.event.MouseEvent e) {
    Point p = e.getPoint();
    int r = jTable.rowAtPoint(p);
    int c = jTable.columnAtPoint(p);
    }
    });
      

  3.   

    究竟应该怎么做呢?
    ChDw(米) 的方法里好像没有事件响应阿?
      

  4.   

    不需要事件响应的,因为JTable是可以支持CellEditor的我实际上是依赖JTable本身的CellEditor功能完成的,当你点击这一单元格的时候,JTable会调用CellEditor的方法完成,我的类中就是将这个JButton返回,这样就会令JButton处理那个格子的位置,并正确响应事件。中间过程不需要你处理