ComboBox sowie String in einer JTable Spalte

Fr33z3m4n

Mitglied
Guten Tag,

ich weiß nicht ob das jetzt der richtige Bereich für mein Thema ist, nur konnte ich mMn. kein geeignetes dafür finden. Wenn dennoch falsch, bitte verschieben, thx.

So: Mein Problem ist es, in einer JTable eine Spalte mit 2 unterschiedlichen Objekten zu versehen.
Zu der einen Seite, möchte ich in einer Zeile (in der Spalte) nur einen String anzeigen lassen, den man bearbeiten kann, und auf der anderen Seite, sollte da ggf. eine ComboBox auftauchen.
Es geht hierbei um Werte aus der SQL.
Wenn es sich um ein Boolean handelt, soll eine ComboBox angezeigt werden, und wenn es sich um einen String handelt, soll keine comboBox angezeigt werden, sondern die normale Zelle als String editierbar.

Ich versuche mich nun schon seit einigen Tagen daran, und bin nur noch am verzweifeln, weil es einfach nicht laufen will.

Ich poste mal ein wenig code, damit Ihr euch vlt. einen kleinen Überblick verschaffen könnt.

Erstmal die Tabelle:
Java:
.....
tblBerechtigung = new JTable();
tblBerechtigung.setRowSelectionAllowed(false);
panel.add(tblBerechtigung, new CellConstraints("2, 4, 4, 1, fill, fill"));
.....

Das erstellen des Models
Java:
Object[][] xBenutzer = new Object[5][5];
int[][] xBenutzerID = new int[5][1];
for (int i = 0; i < 5; i++) {
	xBenutzer[i][0] = new String("Benutzer " + i);
	xBenutzer[i][1] = new String("Mandant " + i);
	xBenutzer[i][2] = new String("Vorname " + i);
	xBenutzer[i][3] = new String("Nachname " + i);
	if (i == 0) {
		xBenutzer[i][4] = new String("String");
	} else {
		xBenutzer[i][4] = new Boolean(true);
	}
	xBenutzerID[i][0] = i;
}
String[] Header = new String[] { "Benutzer", "Mandant", "Vorname", "Nachname", "Boolean" };
MyDefaultTableModel tblModel = new MyDefaultTableModel(Header, xBenutzer, xBenutzerID, 0);
tblBerechtigung.setModel(tblModel);
Java:
MyDefaultTableModelextends DefaultTableModel
Nun wird die ComboBox erstellt
Java:
// ComboBox
Object[] values = new Object[] { new String("Ja"), new String("Nein") };
JComboBox comboBox = new JComboBox(values);
TableColumn column = tblBerechtigung.getColumnModel().getColumn(4);
comboBox.setEditable(true);
column.setCellEditor(new MyDefaultCellEditor(comboBox));
column.setCellRenderer(new MyJComboBoxRenderer(values));
DefaultCellEditor
Java:
public class MyDefaultCellEditor extends DefaultCellEditor {

	private static final long serialVersionUID = 4849412983002818694L;
	
	public MyDefaultCellEditor(JComboBox comboBox) {
		super(comboBox);
	}
}
ComboBoxRenderer
Java:
public class MyJComboBoxRenderer extends JComboBox implements TableCellRenderer {

	private static final long serialVersionUID = -8520403329366110894L;
	protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();

	public MyJComboBoxRenderer (Object[] items) {
		super(items);
	}

	public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
			int row, int column) {

		// if (isSelected) {
		// setForeground(table.getSelectionForeground());
		// super.setBackground(table.getSelectionBackground());
		// } else {
		// setForeground(table.getForeground());
		// setBackground(table.getBackground());
		// }
		// Select the current value
		if(value instanceof Boolean) {
			this.setEditable(true);
		}
		else {
			this.setEditable(false);
		}
		setSelectedItem(value);
		return this;
	}
}
Das ist jetzt der letzte Stand, nach diversen Rumspielen/Testen usw. ;(
Hoffe mir kann da jemand helfen, wenn das überhaupt möglich ist, weil ich bislang noch nichts in dieser Richtung gefunden habe, dass man pro Zeile/Spalte den Typen ändern könnte.
 

Michael...

Top Contributor
In dem Fall würde ich nicht den DefaultCellEditor verwenden:
Java:
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class TableComboEditorDemo extends JFrame {
	
	public TableComboEditorDemo() {
		JTable table = new JTable(new DefaultTableModel(new Object[][] {
				{ "String", "Test" },
				{ Boolean.FALSE, "Test" } ,
				{ Boolean.TRUE, "Test" },
				{ "String", "Test" },
				{ Boolean.FALSE, "Test" }},
				new String[] {"Spalte A", "Spalte B" }));
		TableColumn column = table.getColumnModel().getColumn(0); 
		column.setCellEditor(new CustomEditor());
		table.setRowHeight(30);
		this.getContentPane().add(new JScrollPane(table));
	}
	
	class CustomEditor extends AbstractCellEditor implements TableCellEditor {
		private JComboBox box;
		private JTextField field;
		private Component currentRenderer;
		
		public CustomEditor() {
			box = new JComboBox(new String[] {"Ja", "Nein"});
			field = new JTextField();
			//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 (currentRenderer.equals(box))
				return (box.getSelectedIndex()==0);
			return field.getText();
		}

		public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
			if (value instanceof Boolean) {
				boolean b = (Boolean) value;
				if (b)
					box.setSelectedIndex(0);
				else
					box.setSelectedIndex(1);
				currentRenderer = box;
			}
			else {
				if (value!=null)
					field.setText(value.toString());
				else
					field.setText("");
				currentRenderer = field;
			}
			return currentRenderer;
		}
	}
	
	public static void main(String[] args) {
		JFrame frame = new TableComboEditorDemo();
		frame.setBounds(0, 0, 500, 300);
		frame.setLocationRelativeTo(null);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
Für den Renderer muss dann ebenfalls die Unterscheidung gemacht werden.
 

Fr33z3m4n

Mitglied
Da sag ich doch mal vielen lieben Dank :)

Renderer hab ich auch angepasst, vielen Dank.
Und dafür hab ich vergeblich einige Tage für gebraucht, tsts ^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Eintrag Combobox über einen String auswählen Java Basics - Anfänger-Themen 3
Mosquera Get String Array - ComboBox Java Basics - Anfänger-Themen 10
H String aus Combobox auslesen Java Basics - Anfänger-Themen 2
D ArrayList<String> to Combobox Java Basics - Anfänger-Themen 7
M String Array in ComboBox toString() Java Basics - Anfänger-Themen 2
Rxiiz Objekt aus ComboBox entfernen Java Basics - Anfänger-Themen 4
Mady Daten von JList & Combobox in JTable adden Java Basics - Anfänger-Themen 2
T ComboBox getValue() zeigt null Java Basics - Anfänger-Themen 7
J Array an Combobox übergeben Java Basics - Anfänger-Themen 5
P JavaFX: Verständnisproblem bei ComboBox/ChoiceBox etc. Java Basics - Anfänger-Themen 9
Rubberduck Combobox-Werte in GUI anzeigen Java Basics - Anfänger-Themen 13
J Combobox füllen mit Wertausgabe von andere Klasse Java Basics - Anfänger-Themen 3
D Custom Buttons oder Custom Combobox Java Basics - Anfänger-Themen 30
G Verlassen einer ComboBox erkennen Java Basics - Anfänger-Themen 16
H Combobox abhängig von RadioButton Java Basics - Anfänger-Themen 4
M ComboBox bestimmte Elemente disablen/ausgrauen Java Basics - Anfänger-Themen 3
T Combobox Wert auslesen und damit weiterrechnen Java Basics - Anfänger-Themen 6
J ComboBox mittels neuer Methode befüllen Java Basics - Anfänger-Themen 3
J Interface Combobox Zustand speichern Java Basics - Anfänger-Themen 1
T Wenn Schaltjahr ist, soll Februar, einen Tag mehr haben, GUI mit combobox Java Basics - Anfänger-Themen 4
J Combobox Objekte Java Basics - Anfänger-Themen 10
kaoZ Input/Output Verzeichnis Inhalt in combobox ausgeben Java Basics - Anfänger-Themen 8
V ComboBox Ergebnisse abhängig von anderer ComboBox - Wie? Java Basics - Anfänger-Themen 7
W Hilfe bei Combobox Java Basics - Anfänger-Themen 9
W GUI Label, ComboBox Java Basics - Anfänger-Themen 4
C Combobox in Abhängigkeit von Spinner Java Basics - Anfänger-Themen 6
D Wert von Combobox in Datei schreiben Java Basics - Anfänger-Themen 2
J Combobox in andere Klasse übergeben Java Basics - Anfänger-Themen 3
B ComboBox(editable) - Text verändern Java Basics - Anfänger-Themen 7
I ComboBox mit Icons + Mehr...! Java Basics - Anfänger-Themen 6
1 Combobox anzeige Java Basics - Anfänger-Themen 7
1 combobox nicht an fesnter angeknüpft Java Basics - Anfänger-Themen 2
1 ComboBox Java Basics - Anfänger-Themen 4
S ComboBox Spielautomat Java Basics - Anfänger-Themen 3
H Darstellung ComboBox in jTable Java Basics - Anfänger-Themen 5
M Combobox Problem Java Basics - Anfänger-Themen 3
Spin ComboBox Java Basics - Anfänger-Themen 4
J Taschenrechner Combobox Reaktion auf Auswahl Java Basics - Anfänger-Themen 2
M ComboBox und ActionListener Java Basics - Anfänger-Themen 3
S AWT ComboBox Ausgaba Java Basics - Anfänger-Themen 5
K rückgabewert combobox Java Basics - Anfänger-Themen 15
E ComboBox werte auslesen Java Basics - Anfänger-Themen 4
E Combobox Auswahl überprüfen Java Basics - Anfänger-Themen 7
B ComboBox Größe ändern Java Basics - Anfänger-Themen 4
D ComboBox Java Basics - Anfänger-Themen 10
N nicht editierbare combobox davon oberstes element auslesen? Java Basics - Anfänger-Themen 5
H combobox auf leeres Feld prüfen? Java Basics - Anfänger-Themen 10
F ComboBox im Vektor auslesen, Vektor<JComboBox> Java Basics - Anfänger-Themen 6
D ComboBox auf <empty> überprüfen Java Basics - Anfänger-Themen 2
P Item in ComboBox manuell hinzufügen? Java Basics - Anfänger-Themen 3
C Welche Elemente sind in der ComboBox? Java Basics - Anfänger-Themen 3
G Wie doppelte Einträge in ComboBox vermeiden ? Java Basics - Anfänger-Themen 9
P Wert aus JTree in ComboBox setzen? Java Basics - Anfänger-Themen 2
D Combobox mit array abhängig von anderer Combobox mit array Java Basics - Anfänger-Themen 4
R Symbolschrift in einer ComboBox! Java Basics - Anfänger-Themen 10
G itemlistener bei combobox? Java Basics - Anfänger-Themen 10
G ComboBox und Arrays Inhalt speichern/ausgeben Java Basics - Anfänger-Themen 7
G ComboBox mit identischen einträgen Java Basics - Anfänger-Themen 2
G ComboBox in eine JTable einbinden Java Basics - Anfänger-Themen 2
A Combobox Struts Java Java Basics - Anfänger-Themen 7
S Größe einer Combobox Java Basics - Anfänger-Themen 5
S Combobox mehrfach verwenden Java Basics - Anfänger-Themen 3
A ComboBox mit unique Werten Java Basics - Anfänger-Themen 2
T ComboBox.GetSelectedIndex() gibt immer nur 0 zurück. Java Basics - Anfänger-Themen 2
H ComboBox zur Laufzeit erzeugen? Fehler. Java Basics - Anfänger-Themen 8
S Combobox mit Icons Java Basics - Anfänger-Themen 3
D wieso ist die combobox nicht von anfang an aktiviert? Java Basics - Anfänger-Themen 4
L Aktual.problem einer Var. wenn ComboBox Element ausgewählt Java Basics - Anfänger-Themen 4
D ComboBox mit Daten einer Datenenbank Java Basics - Anfänger-Themen 8
A Combobox füllen Java Basics - Anfänger-Themen 4
C Combobox mit "History" Java Basics - Anfänger-Themen 3
W Mehrfacheinträge in ComboBox Java Basics - Anfänger-Themen 8
krgewb String mit Datumsangabe in Long umwandeln Java Basics - Anfänger-Themen 2
D String Groß/Kleinschreibung Ignorieren Java Basics - Anfänger-Themen 4
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
Kartoffel_1 String transformation Java Basics - Anfänger-Themen 7
H String-Operation replace() - Zeichenkette verdoppeln Java Basics - Anfänger-Themen 2
K String analysieren Java Basics - Anfänger-Themen 27
Beowend String zu Date parsen Java Basics - Anfänger-Themen 1
Beowend String auf Satzzeichen überprüfen? Java Basics - Anfänger-Themen 6
H Liste nach String-Länge sortieren Java Basics - Anfänger-Themen 1
String in ArrayList umwandeln Java Basics - Anfänger-Themen 1
I Sass Compiler und String erhalten? Java Basics - Anfänger-Themen 7
Avalon String in Double bzw. Währung konvertieren Java Basics - Anfänger-Themen 6
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
J Schlüsselworte Prüfen, ob ein bestimmtes, ganzes Wort in einem String enthalten ist. Java Basics - Anfänger-Themen 6
N String überprüfen Java Basics - Anfänger-Themen 3
E String zerlegen aus args Java Basics - Anfänger-Themen 1
M Long-Typ in String-Änderung führt zu keinem Ergebnis bei großer Zahl Java Basics - Anfänger-Themen 11
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
J String Filter Java Basics - Anfänger-Themen 5
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Größter zusammenhängender Block gleicher Zeichen im String Java Basics - Anfänger-Themen 1
XWing Randomizer mit einem String Java Basics - Anfänger-Themen 2
D 2D Char Array into String Java Basics - Anfänger-Themen 2
H Cast von Float nach String klappt nicht Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben