Re: Combobox how to disable edit but allow select
John_Woo schrieb:
if MyComboBox is as following (without overwrite actionPerformed
method)
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class Test {
public static final void main( String args[] ) throws Exception {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
MyComboBox my = new MyComboBox();
frame.setContentPane( my );
frame.pack();
frame.setVisible( true );
}
}
class MyComboBox extends JComboBox implements ActionListener
{
MyComboBox()
{
addItem("a");
addItem("b");
addItem("c");
setEditable( false );
addActionListener( this); //line A
}
}
then once selecting an item, the field always displays blank. I still
have no idea about it.
Ah, now *I* do understand. You really didn't override actionPerformed
(and according to the API you must not).
OK, let's see what's going on there.
First of all, we have to distinguish two things:
a) JComboBox's implementation of ActionListener
b) JComboBox's action listeners
If you select an element from the list, JComboBox#setSelectedIndex gets
called which in turn calls JComboBox#setSelectedItem which in turn fires
an action event (that is to notify every ActionListener which is on
JComboBox's listener list). Note that a) is not affected by this.
What you do is to add JComboBox's implementation of ActionListener (a)
to it's own listener list (b). Now, JComboBox's implementation of
ActionListener will be included in the event processing chain mentioned
above.
JComboBox's actionPerformed() gets the item from it's editor and updates
the data model (among other things).
But what's the editor's item of an uneditable JComboBox? It's an empty
string. And that's the result.
So, the solution is pretty clear: don't do anything with JComboBox's
implementation of ActionListener :)
Bye
Michael