Ich habe in einer JTable eine PComboBox aus der PSwing-Library PSwing Java Swing Components als Editor.
Alleine funktioniert die PComboBox so, daß ich eine Auswahl aus den vorhandenen Items treffen kann, indem ich:
- die Werte per Maus aus der DropdownBox auswähle
- die Werte per Tastatur ins Editorfeld eingebe (hier werden nur Zeichen akzeptiert, mit denen noch mindestens ein Eintrag in den ComboBox-Items verfügbar ist.) Nicht vollständige Werte werden automatisch mit dem ersten Fund einer Binären Suche ergänzt. Schwierig zu erklären. Am besten einfach hier mal ausprobieren PSwing Java Swing Components
Nun möchte ich diese Funktionalität auf gerne in meinem TableCellEditor benutzen.
Hab dazu auch mal Testklassen geschrieben:
1. Frame mit der JTable:
2. Meinen ComboBoxEditor
Dummerweise spielt die PComboBox hier total verrückt und läßt mich mit der Tastatur nur den zuletzt selectierten Eintrag auswählen.
Das Verhalten sieht so aus, als ob die Itemliste leer wäre und die Auswahl wird abgebrochen wird, anstatt aus der Itemliste auszuwählen.
Kann mir da wer sagen, was ich falsch mache, bzw. was ich ändern muß?
Muß nicht unbedingt eine PComboBox sein, normale JComboBox würds im Moment auch mal machen mit der Auflage, daß ich händisch was eingeben kann und die DropDownliste automatisch zum ersten Vorkommen springt.
(Bsp.: Eingabe: De --> In der DropDownListe wird automatisch "Deutsch" selectiert.)
Alleine funktioniert die PComboBox so, daß ich eine Auswahl aus den vorhandenen Items treffen kann, indem ich:
- die Werte per Maus aus der DropdownBox auswähle
- die Werte per Tastatur ins Editorfeld eingebe (hier werden nur Zeichen akzeptiert, mit denen noch mindestens ein Eintrag in den ComboBox-Items verfügbar ist.) Nicht vollständige Werte werden automatisch mit dem ersten Fund einer Binären Suche ergänzt. Schwierig zu erklären. Am besten einfach hier mal ausprobieren PSwing Java Swing Components
Nun möchte ich diese Funktionalität auf gerne in meinem TableCellEditor benutzen.
Hab dazu auch mal Testklassen geschrieben:
1. Frame mit der JTable:
Java:
package combobox_in_table;
import java.awt.Dimension;
import javax.swing.DefaultCellEditor;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import com.pallas.swing.pcombobox.PComboBox;
public class Table extends JFrame
{
// Konstanten:
private static final long serialVersionUID = 1941793965489302399L;
private PComboBox combo = new PComboBox(new String[] {
"Sortierung1",
"Sortierung2",
"Sortierung3",
"Test1",
"Test2",
"Test3"});
// Attribute:
public static void main (String[] args)
{
Table table = new Table();
table.start();
}
public void start()
{
DefaultTableModel model1 = new DefaultTableModel(new String[]{"header1", "header2", "header3"}, 0);
JTable tbl = new JTable(model1);
tbl.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
tbl.createDefaultColumnsFromModel();
model1.addRow(new String[]{"TestCombo1","TestCombo2","TestCombo3"});
//to select a column where was the combobox, in this case, the column 0
tbl.getColumnModel().getColumn(0).setCellEditor(new MyComboBoxEditor(combo));
tbl.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(combo));
tbl.getColumnModel().getColumn(2).setCellEditor(new DefaultCellEditor(combo));
tbl.setPreferredSize(new Dimension(400,200));
add(new JScrollPane(tbl));
pack();
setVisible(true);
}
}
2. Meinen ComboBoxEditor
Java:
package combobox_in_table;
import java.awt.Component;
import javax.swing.AbstractCellEditor;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;
import com.pallas.swing.pcombobox.PComboBox;
public class MyComboBoxEditor extends AbstractCellEditor implements TableCellEditor
{
private static final long serialVersionUID = -3098925604828480551L;
private PComboBox delegate = new PComboBox();
public MyComboBoxEditor(PComboBox cb)
{
delegate = cb;
}
@Override
public Object getCellEditorValue()
{
// TODO Auto-generated method stub
return delegate.getSelectedItem();
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int rowIndex, int colIndex)
{
//delegate.setSelectedItem(value);
return delegate;
}
}
Dummerweise spielt die PComboBox hier total verrückt und läßt mich mit der Tastatur nur den zuletzt selectierten Eintrag auswählen.
Das Verhalten sieht so aus, als ob die Itemliste leer wäre und die Auswahl wird abgebrochen wird, anstatt aus der Itemliste auszuwählen.
Kann mir da wer sagen, was ich falsch mache, bzw. was ich ändern muß?
Muß nicht unbedingt eine PComboBox sein, normale JComboBox würds im Moment auch mal machen mit der Auflage, daß ich händisch was eingeben kann und die DropDownliste automatisch zum ersten Vorkommen springt.
(Bsp.: Eingabe: De --> In der DropDownListe wird automatisch "Deutsch" selectiert.)