我正在向 JButton 添加 ItemListener,但方法未运行。 我在java API中读到,JButton可以通过addItemListener方法添加一个实现ItemEventListenr接口(interface)的对象。但是当按下JButton时,只有actionPerform方法运行。我也尝试调用
JButton.setSelected(true)
但它没有做出改变。
JFrame frame = new JFrame();
plainJButton = new JButton( "Plain Button" );
plainJButton.setSelected(true);
ButtonHandler handler = new ButtonHandler();
ButtonItemHandler itemHandler = new ButtonItemHandler();
plainJButton.addActionListener(handler );
plainJButton.addItemListener( itemHandler );
frame.add( plainJButton ); // add plainJButton to JFrame
// inner class for button event handling
private class ButtonHandler implements ActionListener
{
// handle button event
public void actionPerformed( ActionEvent event )
{
JOptionPane.showMessageDialog( ButtonFrame.this, String.format(
"You pressed: %s", event.getActionCommand() ) );
} // end method actionPerformed
} // end private inner class ButtonHandler
// inner class for button event handling
private class ButtonItemHandler implements ItemListener
{
public void itemStateChanged(ItemEvent e)
{
System.out.println(e.getStateChange()+"\n");
System.out.println(plainJButton.isSelected() +"\n");
}
}
} // end class ButtonFrame
我期望 itemStateChange 方法将运行,但只运行 actionPerformed 方法。
最佳答案
当按下 JButton
时,
ItemListener
不会被触发。 (不完全确定) ItemListener
永远不会为 JButton
触发,除非您手动触发它。 JButton
提供 addItemListener
方法的原因是它从其父类 AbstractButton 实现了 ItemSelectable
继承。 AbstractButton
需要提供此方法,因为有很多组件类扩展
它并且它们需要是ItemSelectable
。例如,看一下JRadioButton extends AbstractButton
。当您选择/取消选择 JRadioButton
时,其 ItemListener
将正常触发。
您始终可以自己测试它,并看到每次单击单选按钮时都会触发监听器。
public class ButtonItemListener {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
JFrame frame = new JFrame("button");
frame.setLayout(new FlowLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton jButton = new JButton("JBUTTON");
jButton.addItemListener(e -> System.out.println("JBUTTON"));
JRadioButton radioButton = new JRadioButton("RADIOBUTTON");
radioButton.addItemListener(e -> System.out.println("RADIOBUTTON"));
frame.add(jButton);
frame.add(radioButton);
frame.setSize(400, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
});
}
}
关于java - 如何使 itemStateChange 方法在按下 JButton 时运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57119276/