2016-11-05 3 views
0

Ich habe das Problem, dass ich nicht auf Schaltflächen klicken kann. Sie verhalten sich, als wären sie nur Textfelder mit dem Design von Knöpfen.jButton nicht anklickbar in jTabelle

mein Main:

tableModStudents = (DefaultTableModel) studentsTable.getModel(); 
    studentsTable.getColumn(studentsTable.getColumnName(8)) 
       .setCellRenderer(new JButtonRenderer()); 
    studentsTable.getColumn(studentsTable.getColumnName(8)) 
       .setCellEditor(new JButtonEditor()); 

mein CellRenderer:

public class JButtonRenderer implements TableCellRenderer {  
    private JButton button = new JButton(); 

    public Component getTableCellRendererComponent(JTable table, 
      Object buttonText, boolean isSelected, boolean hasFocus, 
      int row, int column) { 
     table.setShowGrid(true); 
     button.setText("Details"); 
     button.setToolTipText(buttonText.toString()); 
     return button; 
    } 
} 

mein CellEditor:

public class JButtonEditor extends AbstractCellEditor implements TableCellEditor { 

    private JButton button; 
    private String txt; 

    public JButtonEditor() { 
     super(); 
     button = new JButton(); 
     button.setOpaque(true); 
     button.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent ae) { 
       System.out.println("Button gedrückt!"); 
      } 
     }); 
    } 

    public Object getCellEditorValue() { 
     return null; 
    } 

    public boolean isCellEditable(EventObject anEvent) { 
     return true; 
    } 

    public boolean shouldSelectCell(EventObject anEvent) { 
     return false; 
    } 

    public boolean stopCellEditing() { 
     return super.stopCellEditing(); 
    } 

    public void cancelCellEditing() { 
    } 

    public void addCellEditorListener(CellEditorListener l) { 
    } 

    public void removeCellEditorListener(CellEditorListener l) { 
    } 

    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { 
     txt = (value == null) ? "" : value.toString(); 
     button.setText(txt); 
     return button; 
    } 
} 

Können Sie das Problem mit, dass finden? Es treibt meinen verrückten ...

Vielen Dank :)

+0

Diese [Frage] (http://stackoverflow.com/q/1475543/243373) auf SO hat einige Links zu Lösungen. –

Antwort

1

Check out Table Button Column.

Es kombiniert einen Button-Renderer und Editor in einer einzigen Klasse.

Sie müssen nur die benutzerdefinierte Action angeben, die aufgerufen werden soll, wenn Sie die Schaltfläche aufrufen (indem Sie entweder auf sie klicken oder ihre mnemonic aufrufen).