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:
Das erstellen des Models
Nun wird die ComboBox erstellt
DefaultCellEditor
ComboBoxRenderer
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.
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
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));
Java:
public class MyDefaultCellEditor extends DefaultCellEditor {
private static final long serialVersionUID = 4849412983002818694L;
public MyDefaultCellEditor(JComboBox comboBox) {
super(comboBox);
}
}
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;
}
}
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.