Swing JTable mit JComboBox

KOKser

Aktives Mitglied
Hallo liebe Gemeinde,

ich habe eine kleine Frage in Bezug auf eine JTable welche in einer Spalte JCombobox -en beinhaltet.

Mein Problem ist das wenn in einer JCombobox etwas ändere sollte diese Änderung (ein ausgrauen des Gewählten Eintrags und das setzen eines Icons ) auch in den anderen JComboBox eintreten. Diese Änderung funktioniert auch für jede JCombobox für sich. Mein Gedanke ist ja das Java fast immer mit Referenzen arbeitet daher sollte die Änderung ja für jede ComboBox übernommen werden. Was für mich heist wenn ich z.b. in Zeile eins den ersten Eintrag wähle müsste dieser in Zeile zwei der erste Eintrag ja ausgegraut sein.

Einige Auszüge aus dem Code

Java:
public class EditableBoxModel extends DefaultComboBoxModel {

	private static final long serialVersionUID = -8133845336102334803L;

	public EditableBoxModel(Vector<Waehlbar<String>> data) {
		super(data);
	}

	@SuppressWarnings("unchecked")
	@Override
	public void setSelectedItem(Object anObject) {
		if (anObject instanceof Waehlbar && ((Waehlbar) anObject).istWaehlbar()) {
			super.setSelectedItem(anObject);
		}
	}

}

Java:
public class EditableCellRenderer extends DefaultListCellRenderer {

	private static final long serialVersionUID = 5109077208165846725L;

	private Daten data = null;

	public EditableCellRenderer() {
	}

	public EditableCellRenderer(Daten data) {
		this.data = data;
	}

	@SuppressWarnings("unchecked")
	public Component getListCellRendererComponent(JList list, Object value,
			int index, boolean isSelected, boolean cellHasFocus) {
		JLabel comp = (JLabel) super.getListCellRendererComponent(list, value,
				index, isSelected, cellHasFocus);
		if (value instanceof Waehlbar) {
			if (data != null) {
				LagerObjekt obj = data.getPalletenStellplaetze().get(
						comp.getText());
				if (obj == null)
					obj = data.getBlockLager().get(comp.getText());
				
				if (((Waehlbar) value).istWaehlbar() || !obj.istGewaehlt()) {
					comp.setForeground(list.getForeground());
					comp.setIcon(Daten.okeyIcon);
				} else {
					comp.setForeground(Color.LIGHT_GRAY);
					comp.setIcon(Daten.nichtIcon);
				}
			} else {
				if (((Waehlbar) value).istWaehlbar()) {
					comp.setForeground(list.getForeground());
				} else {
					comp.setForeground(Color.LIGHT_GRAY);
				}
			}
		}
		return comp;
	}

Java:
			....			
			TableColumn zielSpalte = tabelle.getColumnModel().getColumn(3);

			final JComboBox boxZiel = new JComboBox();
			boxZiel.setModel(new EditableBoxModel(stellplaetze.get(1)));
			boxZiel.setRenderer(new EditableCellRenderer(data));
			boxZiel.addItemListener(new JComboBoxItemListener(panel));
			zielSpalte.setCellEditor(new DefaultCellEditor(boxZiel));
			....

Ich hoffe ihr könnt mir helfen.
lg KOKser
 

Michael...

Top Contributor
Hab mir den Code nicht grossartig angeschaut,
aber wenn ich das richtig verstanden habe, hast Du eine ComboBox als CellEditor und bei Änderung einer Zelle die einen solchen Editor enthält sollen alle anderen die ebenfalls den Editor enthalten (also alle Zellen der Spalte) den selben Eintrag bekommen.

Das funktioniert nur über Änderungen im TableModel, die ComboBox wird nur als Editor für die Zelle verwendet - ist also nicht die Zelle.
 

KOKser

Aktives Mitglied
Servus ,

danke für die Antwort. Allerdings weis ich nicht wie diese Änderungen aussehen?

Ich meine es wäre ungünstig alle Zeilen zu durch laufen und in jeder JComboBox den geänderten Eintrag suchen und entsprechend zu reagieren (bei bis zu 5.000 Einträgen pro JComboBox wäre das Zeit aufwendig (im worst-case)).

Wäre nett wenn du zeigen könntest wie du es meinst.

lg KOKser
 

Michael...

Top Contributor
Ich weiss nicht, ob ich das richtig verstanden habe aber eigentlich willst Du doch nur, das wenn eine Zelle in Spalte x geändert wird alle anderen in der selben Spalte den Wert übernehmen??
Oder geht es um das Datenmodel der ComboBox??
 

KOKser

Aktives Mitglied
Fast richtig, es geht darum das wenn die Zelle X geändert wird der Eintrag der dort gewählt wurde in den anderen Zellen ausgegraut wird. Der Eintrag in Zelle X soll nicht als Wert gesetzt werden.
 

Michael...

Top Contributor
Also eine bereits selektierter Eintrag soll für andere Zellen nicht mehr anwählbar sein.
Das muss dann über das Model der Combox gesteuert werden. Muss mal überlegen...
 

KOKser

Aktives Mitglied
Das mit dem ausgrauen funktioniert ja soweit auch aber eben nur Zelle für Zelle, was heist ich wähle in Zelle A Eintrag 1 es klappt aber in Zelle B beleibt der Eintrag 1 wie er ist.
 

KOKser

Aktives Mitglied
Servus,

ich habs soweit im Griff bekommen das es gewählte Einträge auch in den anderen ComboBoxen über nommen wird. Allerdings nicht sofort.

Am sofort Übernehmen ( siehe Screenshot) hängt es noch. Ich weis nicht wo das Problem liegt.

Bei dem Screenshot erkennt man das ich in der vorhergehenden Zeile, den Eintrag 01-01-A3 gewählt habe, nun müsste genau dieser Eintrag genauso aussehen wie 01-01-A1 und A2 allerdings passiert das nicht! Besser gesagt es passiert schon, nur aber um einen Eintrag verspätet. Also würde ich nun 01-01-B1 wählen wäre 01-01-A3 in der nächste Zeile bzw. Combox (natürlich unabhängig von der Zeile) auch als nicht Wählbar markiert.

Ich möchte gleich klar stelle das dieser Fehler wirklich nicht sporadisch sondern die ganze Zeit auftritt, des weiteren ist es auch nicht wichtig ob ich die Einträge in einer Reihe auswähle, es wird immer der zuvor gewählte Eintrag nicht als gewählt angezeigt. Wenn ich z.b. den 3ten Eintrag wählen möchte wird der erste Eintrag da erst als gewählt makiert.

Ich danke euch schon mal.
 

Anhänge

  • screenie.png
    screenie.png
    21,5 KB · Aufrufe: 32

Michael...

Top Contributor
Wie schaut denn der Code dahinter aus? Ohne den kann man nicht viel dazu sagen.

Am sichersten wäre vor dem Aufruf des Editors die Tabellespalte zu durchlaufen und das Model der ComboBox anzupassen - kann aber je nach Umfang der Tabelle und der möglichen Einträge etwas dauern.
 

KOKser

Aktives Mitglied
Servus,

ich denke der Fehler muss im internen Aufruf des Renderes der Combobox liegen, da dieser ja für diese Darstellung verantwortlich ist. Da her müsste ich einfach nach dem eine Action passiert ist den Renderer aufrufen.

Hier der Code:
Java:
public class EditableCellRenderer extends DefaultListCellRenderer {

	private static final long serialVersionUID = 5109077208165846725L;

	private Daten data;

	public EditableCellRenderer() {
		data = null;
	}

	public EditableCellRenderer(Daten data) {
		this.data = data;
	}

	@SuppressWarnings("unchecked")
	public Component getListCellRendererComponent(JList list, Object value,
			int index, boolean isSelected, boolean cellHasFocus) {

		JLabel comp = (JLabel) super.getListCellRendererComponent(list, value,
				index, isSelected, cellHasFocus);

		if (value instanceof Waehlbar) {
			Waehlbar w = (Waehlbar) value;
			if (data != null) {

				LagerObjekt obj = data.getLagerObjekt(w.toString());
				if (obj != null) {
					if (obj.istGewaehlt()) {
						comp.setForeground(Color.LIGHT_GRAY);
						comp.setIcon(Daten.nichtIcon);
					} else {
						comp.setForeground(list.getForeground());
						comp.setIcon(Daten.okeyIcon);
					}
				}else{
					if (w.istWaehlbar()) {
						comp.setForeground(list.getForeground());
					} else {
						comp.setForeground(Color.LIGHT_GRAY);
					}
				}

			} else {
				if (w.istWaehlbar()) {
					comp.setForeground(list.getForeground());
				} else {
					comp.setForeground(Color.LIGHT_GRAY);
				}
			}
		}
		return comp;
	}

}
 
Ä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
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
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
J Drag und drop aus einer JTable - bitte um Unterstützung AWT, Swing, JavaFX & SWT 2
S HPRO und UPRO gemeinsame JTABLE gemeinsamer RENDERER ? AWT, Swing, JavaFX & SWT 1
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
S JTable - Feldinhalte anzeigen AWT, Swing, JavaFX & SWT 15
D Swing JTable Spaltenbreite AWT, Swing, JavaFX & SWT 1
W Gibt es einen "automatischen Listener" in Swing oder JTable oder der ATM-Klasse? AWT, Swing, JavaFX & SWT 14
G jTable - getSelectedRow() AWT, Swing, JavaFX & SWT 3
I JTable mit einem Button zu einer Detail Seite springen AWT, Swing, JavaFX & SWT 4
P JTable Listener für die Änderung einzelner Zellen oder Rows AWT, Swing, JavaFX & SWT 2
D Tastaturabfragen CTRL+t, CTRL+E bei eine JTable, bestehend aus JTextAteas AWT, Swing, JavaFX & SWT 4
P Checkboxes in JTable nicht editable AWT, Swing, JavaFX & SWT 9
F Best-Practise: JTable Text in Zelle zu groß AWT, Swing, JavaFX & SWT 2
izoards JTable in CSV File schreiben... AWT, Swing, JavaFX & SWT 23
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
I JTable, DefaultTableModel, zwei Zahlen multiplizieren. AWT, Swing, JavaFX & SWT 26
M JTABLE / wie oft wurde gewürfelt. AWT, Swing, JavaFX & SWT 1
F JTable vergrößern AWT, Swing, JavaFX & SWT 2
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
J Swing Werte des JTable werden nicht angezeigt AWT, Swing, JavaFX & SWT 9
T Swing JTable cellRenderer mit jpg Hintergrundfarbe lässt sich nicht ändern. AWT, Swing, JavaFX & SWT 1
HoT Einzelne Zelle in JTable Rahmen unten setzen AWT, Swing, JavaFX & SWT 24
B JTable Zellen zusammenfügen AWT, Swing, JavaFX & SWT 3
M Swing Cell Renderer für Zeilenumbruch in JTable AWT, Swing, JavaFX & SWT 0
H JTable im JSplitPane darstellen AWT, Swing, JavaFX & SWT 2
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
D Zeilenumbruch in einer JTable AWT, Swing, JavaFX & SWT 9
R Swing JTable und Spaltenausrichtung AWT, Swing, JavaFX & SWT 8
G JTable füllen AWT, Swing, JavaFX & SWT 1
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
W Swing JTable Zeilenumbruch innerhalb einer Zelle AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M Swing Automatischer Editorstart in JTable-Zelle AWT, Swing, JavaFX & SWT 5
ralfb1105 Swing JTable aktualisieren AWT, Swing, JavaFX & SWT 5
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
M JTable.setDefaultRenderer(...) greift nicht AWT, Swing, JavaFX & SWT 0
J JTable: Eingabe in Tabellenzelle korrigieren AWT, Swing, JavaFX & SWT 4
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
D JTable nach INSERT aktualisieren /refreshen AWT, Swing, JavaFX & SWT 1
D MySQL Daten in JTable anzeigen AWT, Swing, JavaFX & SWT 2
H Swing Jtable extra spalte AWT, Swing, JavaFX & SWT 6
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
S Swing Mal wieder JTable Ansicht aktualisieren AWT, Swing, JavaFX & SWT 10
A JTable mit Daten füllen AWT, Swing, JavaFX & SWT 1
VfL_Freak Swing Einzelne Zeile in jTable selektieren klappt nicht AWT, Swing, JavaFX & SWT 7
N AWT jTable CellRenderer AWT, Swing, JavaFX & SWT 6
T Swing JTable valueChanged datensatz löschen AWT, Swing, JavaFX & SWT 1
0 Swing JTable aus anderer Klasse updaten AWT, Swing, JavaFX & SWT 5
S Jtable defaultRenderer wohin damit ? AWT, Swing, JavaFX & SWT 23
T Swing JTable / FocusListener AWT, Swing, JavaFX & SWT 0
it_is_all Warum wird die JTable im JDialog nicht angezeigt? AWT, Swing, JavaFX & SWT 1
L Swing JTable im Panel darstellen AWT, Swing, JavaFX & SWT 8
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
J addRow bei JTable AWT, Swing, JavaFX & SWT 6
M Jtable gibt -1 wert bei selectedRow und Column AWT, Swing, JavaFX & SWT 3
Meeresgott Swing JTable AWT, Swing, JavaFX & SWT 4
J JTable Selection Listener funktioniert nicht AWT, Swing, JavaFX & SWT 4
C Swing Daten in JTable wiedergeben per TableModel und MVC Pattern AWT, Swing, JavaFX & SWT 16
Z Swing Drag&Drop zwischen JTable und JTree AWT, Swing, JavaFX & SWT 4
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
B Swing JTable sortieren AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben