Anschrift
Frauengasse 3-5
2500 Baden
02252 / 44403

JTable und Buttons in Spalte 16-08-2011

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, 25));
JButton btn2 = new JButton();
btn2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/cancel.png")));
btn2.setPreferredSize(new java.awt.Dimension(25, 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]