gpt4 book ai didi

java - 如何使 itemStateChange 方法在按下 JButton 时运行?

转载 作者:行者123 更新时间:2023-12-02 02:49:26 24 4
gpt4 key购买 nike

我正在向 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com