JComboBox in JTable, Actionlistener

B

betram

Gast
Hallo,

ich habe eine JTable, bei der ich einzelne Zellen mit unterschiedlichen JComboBoxes befüllen möchte. Folglich habe ich einen DefaultCellEditor wie folgt umgeschrieben (zur Übersichtlichkeit ein wenig gekürzt:
Java:
    class MyTableCellEditor extends DefaultCellEditor {

        private List<JComboBox> data;

        public MyTableCellEditor() {
            super(new JComboBox());
            data = new LinkedList();

        }

        public void addItemForCell(int row, int column, Object item) {
            boolean exists = false;

            if (column == 10) // nur spalte 10 wird im moment benötigt
            {
                if (data .size() - 1 < row) {    // already item added for cell
                    data .add(new JComboBox());
                }
                 data .get(row).addItem(item);
               
            }         
        public JComboBox getItemsForCell(int row, int column) {
            JComboBox temp = new JComboBox();
            if (column == 10) {
                temp = data .get(row);
            }             return temp;
        }

        @Override
            public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
            JComboBox combo = (JComboBox) super.getTableCellEditorComponent(table, value, isSelected, row, column);
            combo.removeAllItems();
            combo.addActionListener(new ComboBoxSelectionHandler());
            JComboBox temp = getItemsForCell(row, column);
            for (int i = 0; i < temp.getItemCount(); i++) {
                combo.addItem(temp.getItemAt(i));
            }

            return combo;
        }
    }

Wenn ich nun in meinem ActionListener das aktuelle Element der Zelle mit jTable.getSelectedRow(); anzeigen lasse, so ist dies immer das Element, welches zu vor angewählt war. Ich muss folglich immer zweimal auf ein ComboBox Item klicken, damit ich das aktuelle Ergebnis verarbeiten kann...Da es mit einem StandardListener (allerdings mit gleichen ComboBoxes für die ganze Spalte) funktioniert ht, vermute ich, daß es am geposteten Code liegen muss.
Muss ich selbst eine Funktion schreiben/überschreiben, welche das aktuelle Element setzt?
 
Zuletzt bearbeitet von einem Moderator:
B

betram

Gast
Hallo,

danke für den Hinweis. Dein DefaultCellRenderer ist ja prinzipiell sehr ähnlich mit dem Unterschied, daß ich die ComboBox später erst befülle. Ich werde mal schauen ob das was ändert.
Die letzte Antwort des Threads von ElJarno habe ich nicht verstanden. Wie weist man combobox items einem Modell zu?

Schöne Grüße

Bertrand
 
B

betram2

Gast
also, das hat auch keinen unterschied gemacht.

wenn ich nun einen itemlistener verwende und mit e.getItem() das Object anzeige, so wird das richtige Objekt angezeit. Allerdings
ist es so schwierig die Quelle zu erfahren, da ich mit e.getSource() nur weiß, dass es von einer ComboBox ausgelöst wurde, aber nicht von welcher.
wenn ich das objekt der Zelle auslese wird nach wie vor das vorherige angezeigt. Dieses wähle ich auch explizit aus, also es ist nicht so, daß da nur die Bestätigung fehlen würde..
 

Michael...

Top Contributor
wenn ich nun einen itemlistener verwende und mit e.getItem() das Object anzeige, so wird das richtige Objekt angezeit. Allerdings
ist es so schwierig die Quelle zu erfahren, da ich mit e.getSource() nur weiß, dass es von einer ComboBox ausgelöst wurde, aber nicht von welcher.
Verwende nur eine ComboBox.
Ich hab mir den alten Code nicht so genau angeschaut und kenne den neuen nicht. Aber im alten Code wird jedes mal wenn ein Editor benötigt wird eine neue ComboBox erzeugt. (Ist nicht unbedingt im Sinne des Erfinders) ;-)

Und für was die List<JComboBox> gut sein soll, habe ich nicht verstanden.
 
B

betram2

Gast
ok ich verwende nun eine Instanz. Die verketteten Listen sind dazu da, den Inhalt der Zellen-Combobox zu puffern. Wieviele ComboBoxen auftauchen hängt an der Anzeil von Zeilen ab, welche dynamisch ist da SQL abfrage.

Ich habe das o.g. Problem nun in den Griff bekommen, indem ich in dem ActionListener ein stopCellEditing() eingeführt habe.
Ist zwar nicht besonders elegant (eigtl sollte das Editieren nach der Auswahl ja erledigt sein) aber es funktioniert
 

Michael...

Top Contributor
ok ich verwende nun eine Instanz. Die verketteten Listen sind dazu da, den Inhalt der Zellen-Combobox zu puffern.
Aber warum ein Liste bestehend aus ComboBoxen?
Wieviele ComboBoxen auftauchen hängt an der Anzeil von Zeilen ab, welche dynamisch ist da SQL abfrage.
Wo tauchen da mehrere ComboBoxen auf? Ich seh nur eine ComboBox als Editor für eine Zelle.


Ich habe das o.g. Problem nun in den Griff bekommen, indem ich in dem ActionListener ein stopCellEditing() eingeführt habe.
Ist zwar nicht besonders elegant (eigtl sollte das Editieren nach der Auswahl ja erledigt sein) aber es funktioniert
Irgendwie muss man der Tabelle sagen, dass die Bearbeitung abgeschlossen ist.
 
B

betram2

Gast
es stimmt, dass es sinnvoller wäre, nur den inhalt der combobox und nicht die combobox selbst zu speichern, ich werde das auch noch ändern, ist aber hierfür erstmal irrelevant.

ich habe nun ein anderes Problem. kann man in einem itemlistener herausfinden, aus welcher Spalte eine Combobox editiert wurde?
(ich habe 2 verschiedene Typen von CBs je nach Spalte und möchte eine Aktion nur dann ausführen, wenn auch diese CB verändert wurde). mit getSource() bekomme ich leider nur die Klasse zurück.
Mir fällt im mom nur ein, zwei instanzen eines itemlisteners mit IDs zu erstellen, jeweils einer spalte zuzuweisen und dann in der klasse die eigene ID zu vergleichen, aber das wirkt mir zu umständlich
 

ymene

Bekanntes Mitglied
betram2 hat gesagt.:
ich habe nun ein anderes Problem. kann man in einem itemlistener herausfinden, aus welcher Spalte eine Combobox editiert wurde?
(ich habe 2 verschiedene Typen von CBs je nach Spalte und möchte eine Aktion nur dann ausführen, wenn auch diese CB verändert wurde). mit getSource() bekomme ich leider nur die Klasse zurück.

Bin mir noch nicht ganz im klaren darüber, was das mit dem ItemListener zu tun hat, aber du kannst Celleditoren sowohl auf bestimmte Datentypen, als auch auf bestimmte Spalten anmelden. Solltest du die Spalte nicht eindeutig am Datentyp festmachen können, so kannst du sie also direkt über den Spaltenindex adressieren und so den jeweiligen Editor anmelden. Beim Anmelden deines Cell-Editors übergibst du dann einfach die entsprechende Combobox (A oder B) an den CellEditor.

Java:
    table.getColumn( SPALTE3 ).setCellEditor( new ComboBoxCellEditor( new JComboBoxA(  ) ) );
    table.getColumn( SPALTE5 ).setCellEditor( new ComboBoxCellEditor( new JComboBoxB(  ) ) );

Sollte es sichbei den verschiedenen Comboboxen um nicht überschriebene sondern eigene Methoden handeln, die du aufrufen musst, so musst du den CellEditor entsprechend anpassen, so dass er beide Comboboxen managen kann, oder halt einen eigenen CellEditor für jede Combobox schreiben, wenn die unterschiede zu gravierend sind.
 
Zuletzt bearbeitet:

Michael...

Top Contributor
ich habe nun ein anderes Problem. kann man in einem itemlistener herausfinden, aus welcher Spalte eine Combobox editiert wurde?
Wozu soll das interessant sein?
Es werden keine ComboBoxen editiert, sondern Zelleninhalte ;-)

Wenn Dich interessiert in welcher Spalte etwas geändert wurde, dann häng doch einen TableModelListener ans TableModel.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Swing JCombobox in einem JTable vorbelegen AWT, Swing, JavaFX & SWT 4
D Swing Erstes Item einer JCombobox in JTable anzeigen AWT, Swing, JavaFX & SWT 2
N JComboBox in JTable [Swing] -> totaler UI-Einsteiger AWT, Swing, JavaFX & SWT 3
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
F Swing JComboBox in JTable AutoComplete + Tab AWT, Swing, JavaFX & SWT 4
M JComboBox Item-Auswahl in JTable AWT, Swing, JavaFX & SWT 2
H Unterschiedliche JComboBox je JTable Zeile AWT, Swing, JavaFX & SWT 4
D Swing jTable mit jComboBox in einem Coloumn AWT, Swing, JavaFX & SWT 28
S Einzelne JComboBox in JTable austauschen AWT, Swing, JavaFX & SWT 4
S Swing AWT-Exception bei JTable mit JComboBox beim Löschen der letzten Zeile AWT, Swing, JavaFX & SWT 3
C jComboBox in jTable ohne Klick öffnen AWT, Swing, JavaFX & SWT 4
O Swing JComboBox in JTable AWT, Swing, JavaFX & SWT 14
K Swing JComboBox in JTable AWT, Swing, JavaFX & SWT 9
E Swing JComboBox als CellEditor in JTable zeigt Elemente nicht sofort an AWT, Swing, JavaFX & SWT 5
M Swing jcombobox als jtable-editor: neues Item auswählen AWT, Swing, JavaFX & SWT 4
N jTable mit JComboBox auslesen AWT, Swing, JavaFX & SWT 6
K Swing JTable mit JComboBox AWT, Swing, JavaFX & SWT 10
A JComboBox bei Veränderungen in der JTable mit aktualisieren AWT, Swing, JavaFX & SWT 6
A JComboBox-Zeilen in JTable AWT, Swing, JavaFX & SWT 2
W JComboBox in einer Reihe von JTable AWT, Swing, JavaFX & SWT 7
G Swing JComboBox in JTable beim Aufklappen befüllen AWT, Swing, JavaFX & SWT 3
S JComboBox in JTable wird erst nach klick angezeigt AWT, Swing, JavaFX & SWT 2
O JCombobox in EINER JTable Cell AWT, Swing, JavaFX & SWT 5
G JComboBox und JTable transparent AWT, Swing, JavaFX & SWT 18
D JCombobox in JTable AWT, Swing, JavaFX & SWT 5
J JCombobox in JTable klappt beim ersten Tastendruck zu AWT, Swing, JavaFX & SWT 3
G JTable mit JComboBox als Celleditor, selectedRow falsch! AWT, Swing, JavaFX & SWT 3
A JCombobox in JTable AWT, Swing, JavaFX & SWT 4
S JCbox in Jtable Zelle nur anzeigen , wenn JCombobox ="a AWT, Swing, JavaFX & SWT 3
H JTable und JCombobox ? AWT, Swing, JavaFX & SWT 2
M JComboBox in JTable immer sichtbar AWT, Swing, JavaFX & SWT 16
R JComboBox über ein AstractTableModel in eine JTable packen AWT, Swing, JavaFX & SWT 2
S JTable (Scrollpane und ColumnNames) und JComboBox AWT, Swing, JavaFX & SWT 2
M JTable mit JCombobox eigene Auswahl pro Zeile ? AWT, Swing, JavaFX & SWT 3
TRunKX Kann man ne JCOmboBox in eine JTAble einfügen AWT, Swing, JavaFX & SWT 10
D JTable und JComboBox oder CheckboxGroup AWT, Swing, JavaFX & SWT 6
S JComboBox in JTable AWT, Swing, JavaFX & SWT 8
K JTable als Popup in einer JComboBox? AWT, Swing, JavaFX & SWT 3
B Wert einer JCombobox in einer JTable setzen AWT, Swing, JavaFX & SWT 2
hannibalstgt Fehler bei JCOMBOBOX GUI Anzeige AWT, Swing, JavaFX & SWT 4
L jComboBox Actionlistener wird beim erstmaligen Befüllen getriggert AWT, Swing, JavaFX & SWT 7
N Keylistener & JComboBox AWT, Swing, JavaFX & SWT 5
R JComboBox abfragen AWT, Swing, JavaFX & SWT 1
Esquid If Befehl bei JComboBox AWT, Swing, JavaFX & SWT 3
kodela Swing Element einer JComboBox ausgrauen AWT, Swing, JavaFX & SWT 3
D JComboBox Strings aus JTextFields zuordnen AWT, Swing, JavaFX & SWT 2
F JComboBox und Model AWT, Swing, JavaFX & SWT 10
I Editierbare JComboBox, die nur Ganzzahlen als Eingabewerte zulässt AWT, Swing, JavaFX & SWT 3
Drachenbauer Swing Wie ändere ich die Farbe der Konturen von jButton und jCombobox? AWT, Swing, JavaFX & SWT 18
Drachenbauer Swing Wie ändere ich den Hintergrund vom Anzeigefeld einer JComboBox, die nicht zum Hineinschreiben offen steht? AWT, Swing, JavaFX & SWT 32
Hatsi09 JCombobox default wert AWT, Swing, JavaFX & SWT 6
D Swing JCombobox Aktion löscht Grafik AWT, Swing, JavaFX & SWT 1
cezary Choice, JComboBox oder JList AWT, Swing, JavaFX & SWT 5
R Swing Java9 NullPointerException bei JComboBox AWT, Swing, JavaFX & SWT 13
ralfb1105 Swing JComboBox update der Daten AWT, Swing, JavaFX & SWT 8
D Swing JCombobox Weiße Leerzeilen AWT, Swing, JavaFX & SWT 10
G JComboBox: Arrow-Button permanent anzeigen AWT, Swing, JavaFX & SWT 4
D Swing Java JComboBox Example AWT, Swing, JavaFX & SWT 16
K Swing JComboBox mit ArrayList füllen AWT, Swing, JavaFX & SWT 4
D Swing "blaues" Element aus JComboBox erhalten AWT, Swing, JavaFX & SWT 6
F JComboBox und Einträge AWT, Swing, JavaFX & SWT 3
gamillton Swing JComboBox mit extra Inhalt + breiteres Popupmenü AWT, Swing, JavaFX & SWT 0
T JPanelsteuerung mit JComboBox AWT, Swing, JavaFX & SWT 5
N Swing Duplikate im Jcombobox vermeiden AWT, Swing, JavaFX & SWT 15
L Swing JComboBox kann nicht erstellt werden! AWT, Swing, JavaFX & SWT 2
C JComboBox Objecte übergeben und Eintrag auswählen AWT, Swing, JavaFX & SWT 3
M Swing JComboBox mit Laufwerksbuchstaben (Windows) AWT, Swing, JavaFX & SWT 6
D Swing Größe einer JComboBox im GridBagLayout aufgrund der maximalen Länge der enthaltenen Daten AWT, Swing, JavaFX & SWT 7
D Swing JComboBox (DefaultComboBoxModel) überschreibt Eintrag beim erstellen AWT, Swing, JavaFX & SWT 0
R Swing Durch JComboBox-Item eine TextArea aktualisieren AWT, Swing, JavaFX & SWT 2
3 JComboBox - Action - Auslesen & Umwandeln AWT, Swing, JavaFX & SWT 9
M Alle Schriftarten in JComboBox AWT, Swing, JavaFX & SWT 5
M Swing JComboBox eigenes Design AWT, Swing, JavaFX & SWT 3
Sin137 JComboBox mit Generics AWT, Swing, JavaFX & SWT 14
R JComboBox erweitern AWT, Swing, JavaFX & SWT 5
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
V Editierbare JComboBox AWT, Swing, JavaFX & SWT 2
F neuen Menüpunkt in jcombobox einfügen AWT, Swing, JavaFX & SWT 1
F Swing Jcombobox mit manueller Rückgabe AWT, Swing, JavaFX & SWT 4
W JComboBox auffristen nach Listenänderung AWT, Swing, JavaFX & SWT 20
S JComboBox mit mehreren Spalten? AWT, Swing, JavaFX & SWT 6
J JComboBox + ItemListener AWT, Swing, JavaFX & SWT 12
T Swing jComboBox auslesen mit Datenbankanbindung AWT, Swing, JavaFX & SWT 3
S JComboBox aus anderer Klasse füllen (Java-Swing) AWT, Swing, JavaFX & SWT 0
H Swing jComboBox Ausgabe -1/null AWT, Swing, JavaFX & SWT 4
C Arrow Farbe bei JComboBox AWT, Swing, JavaFX & SWT 2
O JTextfield und JComboBox Wert in SQL Database speichern AWT, Swing, JavaFX & SWT 4
S JComboBox UTF-8 Codierung zuweisen AWT, Swing, JavaFX & SWT 5
A JComboBox mit Array aktualisieren AWT, Swing, JavaFX & SWT 7
S JComboBox nach auswahl erneuern AWT, Swing, JavaFX & SWT 4
S Swing JComboBox mit Listener aktualisieren AWT, Swing, JavaFX & SWT 13
A Swing per JComboBox gewünschtes Attribut auswählen und Komponenten passen sich an AWT, Swing, JavaFX & SWT 7
I JComboBox gibt bei ausgewählten ITem NullPointer an... AWT, Swing, JavaFX & SWT 3
D Swing JCombobox - Tooltip Location ändern AWT, Swing, JavaFX & SWT 4
J JComboBox Dropdown Icon AWT, Swing, JavaFX & SWT 2
M Swing Mix JComboBox - JButton? AWT, Swing, JavaFX & SWT 6
A Swing bei Auswahl und klick eines JComboBox buttons die Klasse eines anderen Projekts aufrufen AWT, Swing, JavaFX & SWT 3
F Swing jComboBox auslesen AWT, Swing, JavaFX & SWT 6
O Swing TableCellRenderer und JComboBox AWT, Swing, JavaFX & SWT 4
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11

Ähnliche Java Themen


Oben