JTable und Buttons in Spalte

Wie erstellt man mehrer JButtons in einer Spalte einer JTable?

mime
ButtonsInColumn.java

5.5 KB

Jede Zelle einer JTable hat einen Editor und einen Renderer. Der erste dient zum Bearbeiten des Objektes, der zweite zum Anzeigen von Objekten.
Möchte man nun einen oder mehrere Buttons darstellen, muss man zwei verschieden JButtons verwenden, für den Editor und für den Renderer. Das ist etwas verwirrend am Beginn.
Um die Sache zu erleichtern, gibt es hier eine Klasse mime
ButtonsInColumn.java

5.5 KB
, mit der beliebig viele Buttons in einer Spalte dargestellt werden können. Und so sieht es dann als Beispiel aus

jbuttons.jpeg

Zu verwenden ist die Klasse wie folgt.
Verwendet wird eine Dummy Klasse, um die Renderer zuzuordnen
[highlight=java]//Dummy Class für Identifikation
private class Aktionen{} [/highlight]
Im Model der Tabelle kann man
[highlight=java]JButton btn1 = new JButton();
btn1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/add.png")));
btn1.setPreferredSize(new java.awt.Dimension( 25));
JButton btn2 = new JButton();
btn2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/cancel.png")));
btn2.setPreferredSize(new java.awt.Dimension( 25));
ButtonsInColumn btnCol = new ButtonsInColumn(this, new JButton[]{btn1, btn2}, new Action[] {delete1, delete}, 4);
this.setDefaultRenderer(Aktionen.class, btnCol);
this.setDefaultEditor(Aktionen.class, btnCol);[/highlight]
Und die Actions werden ebenfalls definiert (hier nur als Bsp. eine)
[highlight=java]Action delete1 = new AbstractAction()
{
  @Override
  public void actionPerformed(ActionEvent e){
    System.out.println("Ich bin Button 1");
  }
}; [/highlight]

Scroll to Top