Ik ben de afgelopen 1.5 uur bezig geweest om een probleem met een JCombobox te fixen. Een combobox wordt gevuld aan de hand van een model, en als een gebruiker klikt op een item in de jcombobox, dan moet het in de jcombobox komen te staan. Maar op een of andere manier werd mijn model nooit op de hoogte gesteld van de setSelectedItem. Als op de JCombobox setSelected item werd aangeroepen, dan verdomde de JCombobox het om het naar het model door te geven, vandaar dat ik het volgende componentje heb gemaakt.
Dit werkt natuurlijk zoals het hoort.
Ik snap dus niet waarom ik dit keer zoveel problemen had met de JCombobox.
Hieronder staat een stuk van mijn code
En zo roep ik het aan.
Java:
1
2
3
4
5
| private class KlotenComboBox extends JComboBox{ public void setSelectedItem(Object x){ getModel().setSelectedItem(x); } } |
Dit werkt natuurlijk zoals het hoort.
Ik snap dus niet waarom ik dit keer zoveel problemen had met de JCombobox.
Hieronder staat een stuk van mijn code
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
| public class PreselectionComboBoxModel implements ComboBoxModel { static Logger s_logger = Logger.getLogger(PreselectionComboBoxModel.class); private IEResultSet _resultSet; private IEResultSetRow _selectedItem; private List<ListDataListener> _dataListenerList = new LinkedList<ListDataListener>(); public PreselectionComboBoxModel(IEResultSet resultSet) { Assert.assertNotNull(resultSet); _resultSet = resultSet; } public void setSelectedItem(Object anItem) { _selectedItem = (IEResultSetRow) anItem; ListDataEvent e = null; for(Iterator<ListDataListener> itt = _dataListenerList.iterator();itt.hasNext();){ if( e == null) e = new ListDataEvent(this,ListDataEvent.CONTENTS_CHANGED,-1,-1); itt.next().contentsChanged(e); } } public IEResultSetRow getSelectedItem() { return _selectedItem; } public int getSize() { try { return _resultSet.size(); } catch (InferenceException ex) { s_logger.error(ex.getMessage(), ex); return 0; } } public IEResultSetRow getElementAt(int index) { return new IEResultSetRow(_resultSet, index); } public void addListDataListener(ListDataListener l) { Assert.assertNotNull(l); _dataListenerList.add(l); } public void removeListDataListener(ListDataListener l) { Assert.assertNotNull(l); _dataListenerList.remove(l); } } |
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| public class IEResultSetRow { private IEResultSet _resultSet; private int _rowIndex; public IEResultSetRow(IEResultSet resultSet, int rowIndex){ Assert.assertNotNull(resultSet); Assert.assertTrue(rowIndex>=0); _resultSet = resultSet; _rowIndex = rowIndex; } public int getRowIndex(){ return _rowIndex; } public IEResultSet getResultSet(){ return _resultSet; } public String toString(){ return Integer.toString(_rowIndex); } } |
En zo roep ik het aan.
Java:
1
2
3
4
5
6
7
| Connection con = _item.getTable().getDatabase().getSqlDatabase().getForcedConnection(); TableSelectQuery selectQuery = new TableSelectQuery(_item.getTable()); IEResultSet ieResult = new IEResultSet(selectQuery, con, map); PreselectionComboBoxModel model = new PreselectionComboBoxModel(ieResult); _comboBox.setModel(model); |
[ Voor 3% gewijzigd door Alarmnummer op 26-08-2003 16:50 ]