Voor een paar dialoogjes ben ik een editable combobox nodig waar de gebruiker items(strings) kan toevoegen en verwijderen. Ik heb nog een oude en slechte implementatie liggen, maar dat ding is echt slecht en werkt onvriendelijk. Heeft iemand misschien z`n implementatie van een combobox bean liggen of weet een link ernaar? Heb overal al gekeken http://www.jars.com http://www.javaboutique.com
http://java.sun.com maar kan dus niets vinden. Vind het beetje zonde om meerdere keren het wiel uit te vinden (en ik ben niet bepaald een lief hebber van Swing).
de oude implementatie
de oude implementatie
code:
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
| package com.jph.interfacebeans.text;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.plaf.basic.*;
public class EditableComboBox extends JComboBox implements KeyListener, MouseListener
{
private JPopupMenu popupMenu;
private JTextField editor;
public EditableComboBox()
{
super();
setEditable(true);
editor = (JTextField)getEditor().getEditorComponent();
editor.addKeyListener(this);
editor.addMouseListener(this);
popupMenu = new JPopupMenu();
add(popupMenu);
popupMenu.add(new RemoveAction());
}
public EditableComboBox(Object items[])
{
super(items);
setEditable(true);
editor = (JTextField)getEditor().getEditorComponent();
editor.addKeyListener(this);
editor.addMouseListener(this);
popupMenu = new JPopupMenu();
add(popupMenu);
popupMenu.add(new RemoveAction());
}
public void addItem(Object object)
{
insertItemAt(object,0);
}
public void setModel()throws Exception
{
throw new Exception("Can`t set Model in EditableComboBox");
}
public void addEditingItem()
{
insertItemAt(editor.getText().toString(),0);
}
public void insertItemAt(Object object,int index)//throws Exception
{
// if(!(object instanceof String))
// throw new Exception("Only Strings allowed");
int k = 0;
boolean unique = true;
while(k<getItemCount())
{
Object s = getItemAt(k);
if(s.equals(object))
{
unique = false;
k = getItemCount();
}
else
k++;
}
if(unique && object.toString().trim().length()>0)
super.insertItemAt(object,index);
}
//an Action needed for the PopupMenu
class RemoveAction extends AbstractAction
{
public RemoveAction()
{
super("Remove");
}
public void actionPerformed(ActionEvent evt)
{
removeItemAt(getSelectedIndex());
}
}
//method to satisfy KeyListener Interface
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode()==KeyEvent.VK_ENTER)
{
insertItemAt(editor.getText().toString(),0);
setSelectedIndex(0);
}
}
//method to satisfy KeyListener Interface
public void keyReleased(KeyEvent e)
{
}
//method to satisfy KeyListener Interface
public void keyTyped(KeyEvent e)
{
}
//method to satisfy MouseListener Interface
public void mouseClicked(MouseEvent e)
{
}
//method to satisfy MouseListener Interface
public void mouseEntered(MouseEvent e)
{
}
//method to satisfy MouseListener Interface
public void mouseExited(MouseEvent e)
{
}
//method to satisfy MouseListener Interface
public void mousePressed(MouseEvent e)
{
}
//method to satisfy MouseListener Interface
public void mouseReleased(MouseEvent e)
{
if (e.isPopupTrigger())
{
int x = e.getX();
int y = e.getY();
popupMenu.show(this, x, y);
}
}
} |