Swing JComboBox in JTable

K-Man

Bekanntes Mitglied
Hallo zusammen
Ich bin mir sicher, die Frage kam schon oft, aber die Suche hat mir nichts gebracht. Vllt bin ich auch nur zu blöd zum suchen.

Ich habe eine JTable und will eine Spalte mit JComboboxen füllen. Wenn ich die ComboBox aber mit
Java:
            Vector v = new Vector();            
            v.add(new JComboBox(...));
            model.addRow(v);
fülle, dann wird nur die toString()-Methode verwendet und es wird nicht die Combobox angezeigt. Wie kann ich die Combobox in eine Table integrieren? Ich muss wohl den Renderer umschreiben. Hab aber keinen Code gefunden. Es ist immer dieselbe Spalte, die mit einer Combobox gefüllt werden soll. Folgender Code klappt nicht.

Java:
class MyTable extends JTable
{
    @Override
    public TableCellEditor getCellEditor(int row, int column)
    {
    Object value = super.getValueAt(row, column);

    if (value != null)
    {
    if (value instanceof JComboBox)
    {
       return new DefaultCellEditor((JComboBox) value);
    }
       return getDefaultEditor(value.getClass());
    }
       return super.getCellEditor(row, column);
    }
}
 

Michael...

Top Contributor
Die ComboBox bitte nicht ins TableModel stecken ;-) Da gehört nur ein Wert hin.
Wenn man die ComboBox als Editor verwenden will, kann man diese - glaube ich - einfach per setCellEdtior() oder setDefaultCellEditor() an die TableColumn bzw. Table übergeben.

In der API Doku gibt's dazu auch ein Bsp. JTable --> How to Use Tables
 

K-Man

Bekanntes Mitglied
Ja die Seite hab ich auch schon gefunden. Aber dann weiß ich nicht, wie ich die anderen Spalten einfügen soll. Wenn ich das richtig verstehe, dann kann ich hier alle Reihen mit der gleichen Combobox festlegen. Bei mir hat aber jede Reihe eine andere Combobox.
 

Michael...

Top Contributor
Man könnte im TableCellEditor die jeweiligen ComboBoxen vorhalten und dann entsprechend eines Kriteriums (Zeilennummer, Inhalt der Zelle...) die passende ComboBox als Editorkomponent zurückgeben.
Wer/was bestimmt welche ComboBox in der jeweiligen Zeile notwendig ist?
 

K-Man

Bekanntes Mitglied
Jede Zeile wird aus der Datenbank befüllt. Eine Position kann die Werte A-H annehmen. Jeder Buchstabe nur einmal, ansonsten alle Kombinationen möglich. Also kann ich die nicht vorher festlegen.
Ich müsste bei jeder Zeile aus der Datenbank lesen, welche Werte von A-H gültig sind und dann eben diese Werte in die Combobox füllen.
 

Michael...

Top Contributor
D.h. die Zellen können entweder leer oder mit A-H befüllt sein, wobei in der gesamten Tabelle ein konkreter Buchstabe nur einmal vergeben sein darf?
Dann bräuchstest Du ja zusätzlich noch einen Algorithmus, der die einmalige Verwendung eines Buchstaben sicherstellt und die ComboBox entsprechend anpasst.
 

K-Man

Bekanntes Mitglied
Nein, in einer Combobox kommt ein Buchstabe nur einmal vor. Der ist von der Datenbank vorgegeben.

Bsp 3 Spaltentabelle:
String1, String2, Combobox (A, B, H)
StringX, StringY, Combobox (A, F)
String4, String12, Combobox (B, C, D, E, F)
 

Michael...

Top Contributor
In dem Fall würde ich ein eigenes Objekt verwenden (siehe Bsp.: ComboObject)
Das Beispiel ist jetzt nur zur Demo auf die Schnelle runtergeschrieben. Selbstversändlich könnte/sollte man dann für das Objekt auch noch einen Renderer zur Verfügung stellen anstatt nur primitiv die toString() zu überschreiben...
Java:
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.AbstractCellEditor;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;

public class TableComboEditorDemo2 extends JFrame {
	
	public TableComboEditorDemo2() {
		DefaultTableModel model = new DefaultTableModel(new String[] {"Spalte A", "Spalte B", "Auswahl"}, 0);
		model.addRow(new Object[] {"String1", "String2", new ComboObject("A", new String[] {"A", "B", "H"})});
		model.addRow(new Object[] {"StringX", "StringY", new ComboObject("F", new String[] {"A", "F"})});
		model.addRow(new Object[] {"String4", "String12", new ComboObject("E", new String[] {"B", "C", "D", "E", "F"})});
		
		JTable table = new JTable(model);
		table.getColumnModel().getColumn(2).setCellEditor(new CustomEditor());
		table.setRowHeight(30);
		this.getContentPane().add(new JScrollPane(table));
	}
	
	class ComboObject {
		private String value;
		private String[] options;
		
		public ComboObject(String value, String... options) {
			this.value = value;
			this.options = options;
		}
		
		public void setValue(String value) {
			this.value = value;
		}
		
		public String getValue() {
			return value;
		}
		
		public String[] getOptions() {
			return options;
		}
		
		public String toString() {
			return value;
		}
	}
	
	class CustomEditor extends AbstractCellEditor implements TableCellEditor {
		private JComboBox box;
		private ComboObject co;
		
		public CustomEditor() {
			box = new JComboBox();
			//optional um den Editor unmittelbar nach der Selektion zu beenden
			box.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent e) {
					CustomEditor.this.stopCellEditing();
				}
			});
		}

		public Object getCellEditorValue() {
			if (co==null)
				return null;
			co.setValue(box.getSelectedItem().toString());
			return co;
		}

		public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
			co = (ComboObject)value;
			box.setModel(new DefaultComboBoxModel(co.getOptions()));
			box.setSelectedItem(co.getValue());
			return box;
		}
	}
	
	public static void main(String[] args) {
		JFrame frame = new TableComboEditorDemo2();
		frame.setBounds(0, 0, 500, 300);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
 
Ä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
B JComboBox in JTable, Actionlistener AWT, Swing, JavaFX & SWT 10
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