JButtons in Tabellenspalten anzeigen

Status
Nicht offen für weitere Antworten.
J

Jochen#16

Gast
Hallo zusammen,

ich versuche gerade voll funktionable JButtons in eine JTable zu integrieren. Dies will mir nicht so recht gelingen. Zwar sind die Buttons als solche erkennbar, ich kann sie aber nicht anklicken. Irgendwas mache ich da scheinbar grundlegend falsch. Nur was?

Ich definiere eine Tabelle mit einem eigenen TableModel (MyTableModel). Für die Spalte, in der die Buttons dargestellt werden sollen, habe ich einen eigenen CellRenderer implementiert (TestRenderer). Die darzustellenen Buttons werden vorher in einem Array definiert und dem Konstruktor des Renderers mitgeliefert.

Jemand eine Idee? Bin für jeden Hinweis dankbar.


Der komplette Code:
Code:
package test;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;

public class TableSelectionDemoExtended extends JPanel implements ActionListener 
{ 
    private JTable table;
    private JButton[] testBtn;

    public TableSelectionDemoExtended() {
        super();
        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));

        testBtn = new JButton[5];
        for (int i = 0; i < 5; i++) 
        {
            testBtn[i] = new JButton("Button " + (i + 1));
            testBtn[i].addActionListener(this);
        }
        
        final TestRenderer weirdRenderer = new TestRenderer(testBtn);
        table = new JTable(new MyTableModel()) 
        {
            public TableCellRenderer getCellRenderer(int row, int column) {
                if (column == 5) 
                {
                    return weirdRenderer;
                }
                return super.getCellRenderer(row, column);
            }
        };        
        add(new JScrollPane(table));
    }

    class MyTableModel extends AbstractTableModel {
        private String[] columnNames = {"First Name",
                                        "Last Name",
                                        "Sport",
                                        "# of Years",
                                        "Vegetarian",
                                        "Test"};
        private Object[][] data = {
            {"Mary", "Campione",
             "Snowboarding", new Integer(5), new Boolean(false), null},
            {"Alison", "Huml",
             "Rowing", new Integer(3), new Boolean(true), null},
            {"Kathy", "Walrath",
             "Knitting", new Integer(2), new Boolean(false), null},
            {"Sharon", "Zakhour",
             "Speed reading", new Integer(20), new Boolean(true), null},
            {"Philip", "Milne",
             "Pool", new Integer(10), new Boolean(false), null},
        };

        public MyTableModel() {}
        
        public int getColumnCount() {
            return columnNames.length;
        }

        public int getRowCount() {
            return data.length;
        }

        public String getColumnName(int col) {
            return columnNames[col];
        }

        public Object getValueAt(int row, int col) {
            return data[row][col];
        }

        public Class getColumnClass(int c) {
            return getValueAt(0, c).getClass();
        }

        public boolean isCellEditable(int row, int col) {
            if (col < 2 || col == 5) {
                return false;
            } else {
                return true;
            }
        }

        public void setValueAt(Object value, int row, int col) {
            data[row][col] = value;
            fireTableCellUpdated(row, col);
        }
    }

    private static void createAndShowGUI() {
        //Disable boldface controls.
        UIManager.put("swing.boldMetal", Boolean.FALSE); 

        //Create and set up the window.
        JFrame frame = new JFrame("TableSelectionDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        TableSelectionDemoExtended newContentPane = new TableSelectionDemoExtended();
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }

    public class TestRenderer extends DefaultTableCellRenderer
    {
        public JButton button[];
        
        public TestRenderer(JButton[] aBtn) 
        {
            button = aBtn;
        }
        
        public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) 
        {
            return button[row];
        }
    }
    
    public void actionPerformed(ActionEvent e) 
    {
        System.out.println("Blah");
        if (e.getActionCommand().startsWith("Button")) 
        {
            System.out.println(e.getActionCommand());
        }
    }
}
 

Wildcard

Top Contributor
Ein Renderer ist etwas anderes als eine auf einem Parent liegende JComponent. Der Renderer wird nur zum zeichnen verwendet, ist also praktisch ein Bild.
Ein Bild verhält sich nicht wie ein Button, auch wenn das Bild einen Button zeigt.
Für dich dürfte der CellEditor interessant sein.
 
J

Jochen#16

Gast
Danke schonmal für den Hinweis.

Leider verstehe ich das nicht... Die Java-Api bzw. Tutorials bringt mich hier auch nicht wirklich weiter.

Ich habe jetzt versucht aus meinem CellRenderer einen CellEditor zu machen, abgeleitet aus AbstractCellEditor unter Verwendung des Interfaces TableCellEditor. Die Methode getTableCellEditorComponent liefert den Button zurück, der in der Zelle angezeigt werden soll. Was soll denn jetzt die Methode getCellEditorValue() (die ja vom AbstractCellEditor nicht ausimplementiert wurde) zurück geben?

Super wäre ein kleines Beispiel-Listening zu dem Thema, wovon ich ums verrecken keins im Netz finden kann... :(

Code:
    public class TestEditor extends AbstractCellEditor implements TableCellEditor
    {
        public JButton button[];
        
        public TestEditor(JButton[] aBtn) 
        {
            button = aBtn;
        }
        
        public Object getCellEditorValue() {
                return ???
        }
    
        //Implement the one method defined by TableCellEditor.
        public Component getTableCellEditorComponent(JTable table, Object value,
            boolean isSelected, int row, int column) 
        {
            return button[row];
        }
    }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
jojoge wie kann ich in eine Benennung eines JButtons eine Variable einbauen? AWT, Swing, JavaFX & SWT 6
G JPanel per Drag and Drop JButtons und Bilder ablegen AWT, Swing, JavaFX & SWT 1
G JPanel mit JButtons und Bilder AWT, Swing, JavaFX & SWT 5
schoel27 Mehrere JButtons sollen das gleiche Event auslösen AWT, Swing, JavaFX & SWT 2
H Auswahlmenü mit JButtons AWT, Swing, JavaFX & SWT 4
H JButtons werden nicht angezeigt AWT, Swing, JavaFX & SWT 5
A Swing Meine JButtons werden nicht angezeigt bitte helft mir AWT, Swing, JavaFX & SWT 2
N "Automatisches" erstellen von jButtons AWT, Swing, JavaFX & SWT 1
F JButtons neu laden AWT, Swing, JavaFX & SWT 4
N Swing JButtons werden nach repaint() doppelt dargestellt AWT, Swing, JavaFX & SWT 12
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
S JButtons an Koordinaten setzen AWT, Swing, JavaFX & SWT 3
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
Java_RY wie kann ich auf JButtons in einem JPanel zugreifen AWT, Swing, JavaFX & SWT 3
M Swing Selbstanordnende JButtons AWT, Swing, JavaFX & SWT 4
J EventHandler Bei JButtons AWT, Swing, JavaFX & SWT 2
L Swing Variable Anzahl an JButtons AWT, Swing, JavaFX & SWT 7
L Array mit JButton, wie rausfinden auf welche JButton geklickt wurde + index des JButtons ausgeben AWT, Swing, JavaFX & SWT 4
A JTextField und JButtons AWT, Swing, JavaFX & SWT 2
F JButtons erstellen lassen mit unterschiedlichen Funktionen AWT, Swing, JavaFX & SWT 3
M JLabel über JButtons zeichnen AWT, Swing, JavaFX & SWT 4
Kenan89 LayoutManager JPanel wächst beim adden neuer JButtons nicht mit AWT, Swing, JavaFX & SWT 4
A JButtons - es wird beim falschen Button die Hintergrundfarbe angepasst AWT, Swing, JavaFX & SWT 2
Z kleine JButtons und ihre Beschriftung AWT, Swing, JavaFX & SWT 5
K Swing Abgerundete JButtons AWT, Swing, JavaFX & SWT 8
Tsuna JButtons in Apple-Design AWT, Swing, JavaFX & SWT 4
J JButtons in aktivieren und deaktivieren AWT, Swing, JavaFX & SWT 3
T JButtons indexiert unter NetBeans anlegen AWT, Swing, JavaFX & SWT 7
H JButtons in JTable anzeigen AWT, Swing, JavaFX & SWT 5
T Maximale Länge eines JButtons AWT, Swing, JavaFX & SWT 5
K JButtons innerhalb eines JPanels verschieben (DRAG&DROP) AWT, Swing, JavaFX & SWT 5
R Swing Verschieben eines jButtons mittels MouseDragged AWT, Swing, JavaFX & SWT 4
K Runde JButtons ? AWT, Swing, JavaFX & SWT 7
B Swing JButtons in eine Arraylist<JButton> einfügen AWT, Swing, JavaFX & SWT 2
G Swing JButtons + ActionListener + final AWT, Swing, JavaFX & SWT 3
U Problem mit JButtons AWT, Swing, JavaFX & SWT 6
C Interface für JButtons,... AWT, Swing, JavaFX & SWT 7
J Swing JButtons und die ActionEvents AWT, Swing, JavaFX & SWT 2
P JButtons haben nicht immer lust zu erscheinen AWT, Swing, JavaFX & SWT 9
U Grafikkontext unter JButtons? AWT, Swing, JavaFX & SWT 5
Strahlungsleck Funktionalität von JButtons (Actionlistener etc.) AWT, Swing, JavaFX & SWT 17
G Sehr kleine JButtons mit Icon oder Beschriftung AWT, Swing, JavaFX & SWT 2
F Sender für jButtons? AWT, Swing, JavaFX & SWT 2
M ich will die alten "alte JButtons"wieder haben AWT, Swing, JavaFX & SWT 6
J JScrollBar scroll-Verhalten auf 2 JButtons umleiten? AWT, Swing, JavaFX & SWT 2
N Minesweeper: 2D Feld von JButtons anlegen AWT, Swing, JavaFX & SWT 19
F Wie Oberfläche verbessern? (JButtons, Textfeld verkleinern) AWT, Swing, JavaFX & SWT 5
U Bilder, JLabels, JButtons voreinander AWT, Swing, JavaFX & SWT 7
D Darstellungsprobleme bei JButtons auf JInternalFrames AWT, Swing, JavaFX & SWT 4
A Hintergrundfrabe eines JButtons innerhalb eines JToolBar AWT, Swing, JavaFX & SWT 4
T Ausrichtung eines Jbuttons AWT, Swing, JavaFX & SWT 6
S JButtons Größe AWT, Swing, JavaFX & SWT 15
M JButtons immer gleiche Größe? AWT, Swing, JavaFX & SWT 8
H Unsichtbare JButtons? AWT, Swing, JavaFX & SWT 5
C JComboBox mit JButtons befüllen AWT, Swing, JavaFX & SWT 8
1 Warum sind JButtons viel breiter als der enthaltene Text ? AWT, Swing, JavaFX & SWT 4
S Text eines JButtons vertikal schreiben AWT, Swing, JavaFX & SWT 5
L-ectron-X Den Text eines JButtons unter das Icon setzen? AWT, Swing, JavaFX & SWT 2
M JButtons in JScrollPanel darstellen AWT, Swing, JavaFX & SWT 6
S JButtons in einem JPanel erscheinen nicht direkt AWT, Swing, JavaFX & SWT 7
G von JButtons erben, aber richtig! AWT, Swing, JavaFX & SWT 4
R JButtons werden nicht dargestellt AWT, Swing, JavaFX & SWT 7
G JButtons AWT, Swing, JavaFX & SWT 7
Z Problem mit Spielfläche aus JButtons AWT, Swing, JavaFX & SWT 2
H große mengen an jbuttons dynamisch erzeugen? AWT, Swing, JavaFX & SWT 15
G Icon eines JButtons ändern? AWT, Swing, JavaFX & SWT 7
M JButtons mit Linie verbinden AWT, Swing, JavaFX & SWT 4
C Beschriftungen von Tabellenspalten mit Combobox aussuchen AWT, Swing, JavaFX & SWT 2
Airwolf89 Swing Anzahl der Tabellenspalten dynamisch setzen AWT, Swing, JavaFX & SWT 2
G Tabellenspalten als IntegerWert sortieren AWT, Swing, JavaFX & SWT 7
J Tabellenspalten trennen AWT, Swing, JavaFX & SWT 14
XWing Swing Image anzeigen und probleme mit klassen AWT, Swing, JavaFX & SWT 3
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
W Kleine Sub-Tabelle in SpreadsheetView-Zelle anzeigen AWT, Swing, JavaFX & SWT 9
J Java GUI Dropdown-Menü anzeigen AWT, Swing, JavaFX & SWT 5
J JavaFx PDF in einem Element in einem Fenster anzeigen. AWT, Swing, JavaFX & SWT 11
M Swing Bilder in Swing anzeigen AWT, Swing, JavaFX & SWT 9
J BufferedImages nacheinander als Video anzeigen AWT, Swing, JavaFX & SWT 14
BananenBrötchen Swing Arraylist in jList anzeigen AWT, Swing, JavaFX & SWT 6
Lukas2904 Swing ID von WLAN Kamera anzeigen lassen. AWT, Swing, JavaFX & SWT 2
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
G AWT AWT Kreise permanent anzeigen AWT, Swing, JavaFX & SWT 3
MiMa File Dateien im ListView als Name anzeigen? AWT, Swing, JavaFX & SWT 6
C Swing In der Titelleiste den Namen und den vollständigen Pfad bzw URL des aktuellen Dokuments anzeigen AWT, Swing, JavaFX & SWT 25
C Swing Aufruf der Funktion (die ein Dialog anzeigt) über Symbol anzeigen lassen AWT, Swing, JavaFX & SWT 4
O Timer in JOptionPane anzeigen AWT, Swing, JavaFX & SWT 2
H Daten aus einer XML(x83-Datei) in einem JFrame anzeigen lassen AWT, Swing, JavaFX & SWT 9
C JavaFX Veränderungen in Scenebuilder in Eclipse als Quellcode anzeigen lassen AWT, Swing, JavaFX & SWT 11
N Textdatei GUI, Text in Textarea anzeigen mehrere Zeilen AWT, Swing, JavaFX & SWT 1
J Warum kann ich die Spaltennummer in der Konsole anzeigen, diese aber nicht speichern ? AWT, Swing, JavaFX & SWT 6
VPChief Icons in 2 Jlabels Director nebeneinander anzeigen AWT, Swing, JavaFX & SWT 26
E Auf JPanel malen und davor JComponenten anzeigen AWT, Swing, JavaFX & SWT 12
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
S Text-Info in der Taskbar anzeigen AWT, Swing, JavaFX & SWT 15
R JavaFX Label oder Imageview anzeigen mit Buttonklick AWT, Swing, JavaFX & SWT 4
B ArrayList, Strings anzeigen AWT, Swing, JavaFX & SWT 1
P Abwächselnd ein Punkt und ein x anzeigen AWT, Swing, JavaFX & SWT 2
A Fenster genau unterhalb von JTextField anzeigen AWT, Swing, JavaFX & SWT 1
N Wie kann ich zwei Grafiken in einer Oberfläche anzeigen lassen? AWT, Swing, JavaFX & SWT 8
T Swing Buffered Image anzeigen AWT, Swing, JavaFX & SWT 45

Ähnliche Java Themen

Neue Themen


Oben