2010-11-29 11 views

Antwort

0

Sie müssen einen benutzerdefinierten CellRenderer hinzufügen, einige Ereignisse aus der Tabelle neu ausrichten und die Zelle neu zeichnen, wenn sich der Status der Schaltfläche ändert. Es ist böse, es ist böse, aber es kann getan werden.

+0

großer mann ich fand es .... vielen dank für ihre hilfe! – Jasra

0

Wie in der Button Table Example gezeigt, werden wir eine Klasse erstellen, die JButton erweitert und implementiert TableCellRenderer.

class ButtonRenderer extends JButton implements TableCellRenderer { 

    public ButtonRenderer() { 
    setOpaque(true); 
    } 

    public Component getTableCellRendererComponent(JTable table, Object value, 
     boolean isSelected, boolean hasFocus, int row, int column) { 
    if (isSelected) { 
     setForeground(table.getSelectionForeground()); 
     setBackground(table.getSelectionBackground()); 
    } else { 
     setForeground(table.getForeground()); 
     setBackground(UIManager.getColor("Button.background")); 
    } 
    setText((value == null) ? "" : value.toString()); 
    return this; 
    } 
} 

Sie müssen dann auch einen Zelleditor für die Spalte erstellen.

class ButtonEditor extends DefaultCellEditor { 
    protected JButton button; 

    private String label; 

    private boolean isPushed; 

    public ButtonEditor(JCheckBox checkBox) { 
    super(checkBox); 
    button = new JButton(); 
    button.setOpaque(true); 
    button.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
     fireEditingStopped(); 
     } 
    }); 
    } 

    public Component getTableCellEditorComponent(JTable table, Object value, 
     boolean isSelected, int row, int column) { 
    if (isSelected) { 
     button.setForeground(table.getSelectionForeground()); 
     button.setBackground(table.getSelectionBackground()); 
    } else { 
     button.setForeground(table.getForeground()); 
     button.setBackground(table.getBackground()); 
    } 
    label = (value == null) ? "" : value.toString(); 
    button.setText(label); 
    isPushed = true; 
    return button; 
    } 

    public Object getCellEditorValue() { 
    if (isPushed) { 
     // 
     // 
     JOptionPane.showMessageDialog(button, label + ": Ouch!"); 
     // System.out.println(label + ": Ouch!"); 
    } 
    isPushed = false; 
    return new String(label); 
    } 

    public boolean stopCellEditing() { 
    isPushed = false; 
    return super.stopCellEditing(); 
    } 

    protected void fireEditingStopped() { 
    super.fireEditingStopped(); 
    } 
} 

Wir werden dann eine Instanz der ButtonRender gesetzt, wie die Zelle für diese Spalte und eine Instanz von ButtonEditor als Zellen-Editor machen.

\\"Button" is the column name 
table.getColumn("Button").setCellRenderer(new ButtonRenderer()); 
table.getColumn("Button").setCellEditor(
    new ButtonEditor(new JCheckBox())); 

example Die in den Link bereitgestellt hat das komplette runnable Beispiel.