Java 对空JComboBox调用addItem会触发actionPerformed事件
我有2个JComboBox控件,最初填充了项。在JComboBox中选择一项会将其移动到另一个JComboBox。 当其中一个JComboBox控件为空时,就会出现问题。当我尝试将项目移动到空的JComboBox时,它会触发其actionPerformed事件 为什么向空的JComboBox添加一个项会这样做?当一个项目被添加到它时,它不会在它被填充时激发。Java 对空JComboBox调用addItem会触发actionPerformed事件,java,swing,events,actionlistener,jcombobox,Java,Swing,Events,Actionlistener,Jcombobox,我有2个JComboBox控件,最初填充了项。在JComboBox中选择一项会将其移动到另一个JComboBox。 当其中一个JComboBox控件为空时,就会出现问题。当我尝试将项目移动到空的JComboBox时,它会触发其actionPerformed事件 为什么向空的JComboBox添加一个项会这样做?当一个项目被添加到它时,它不会在它被填充时激发。 如何防止事件为空时触发?下面的代码将转储堆栈跟踪 import javax.swing.JComboBox; import java.aw
如何防止事件为空时触发?下面的代码将转储堆栈跟踪
import javax.swing.JComboBox;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class EmptyComboboxTest {
public static void main( String[] args ) {
EventQueue.invokeLater( new Runnable() {
@Override
public void run() {
JComboBox<String> emptyBox = new JComboBox<String>();
emptyBox.addActionListener( new ActionListener() {
@Override
public void actionPerformed( ActionEvent e ) {
Thread.dumpStack();
}
} );
emptyBox.addItem( "test" );
}
} );
}
}
如果查看源代码,可以看到在添加元素时,当当前未选择任何内容时,将选中该元素
if ( objects.size() == 1 && selectedObject == null && anObject != null ) {
setSelectedItem( anObject );
}
更改选择可能导致触发ActionEvent。如果遵循源代码,则没有禁用此功能的机制。但是,您可以在添加元素之前禁用侦听器,然后再启用它。下面的代码片段转储堆栈跟踪
import javax.swing.JComboBox;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class EmptyComboboxTest {
public static void main( String[] args ) {
EventQueue.invokeLater( new Runnable() {
@Override
public void run() {
JComboBox<String> emptyBox = new JComboBox<String>();
emptyBox.addActionListener( new ActionListener() {
@Override
public void actionPerformed( ActionEvent e ) {
Thread.dumpStack();
}
} );
emptyBox.addItem( "test" );
}
} );
}
}
如果查看源代码,可以看到在添加元素时,当当前未选择任何内容时,将选中该元素
if ( objects.size() == 1 && selectedObject == null && anObject != null ) {
setSelectedItem( anObject );
}
更改选择可能导致触发ActionEvent。如果遵循源代码,则没有禁用此功能的机制。但是,您可以在添加元素之前禁用侦听器,然后再启用它。避免actionPerformed事件的方法是使用组合框的模型,它是javax.swing.ComboxModel接口的实例 例如,DefaultComboxModel实现允许您在模型中添加/删除元素。获取模型,处理它,当模型准备好后,将其设置回组合框。避免actionPerformed事件的方法是使用组合框的模型,它是javax.swing.ComboxModel接口的一个实例
例如,DefaultComboxModel实现允许您在模型中添加/删除元素。获取模型,然后处理它,当模型准备好后,将其设置回组合框。更改选择可能会触发ActionEvent。如果遵循源代码,则没有禁用此功能的机制。但是,您可以在添加元素之前禁用侦听器,然后再启用它
//AB LUND PE CHARHO更改选择可能会触发ActionEvent。如果遵循源代码,则没有禁用此功能的机制。但是,您可以在添加元素之前禁用侦听器,然后再启用它 //阿伯隆德佩查霍酒店