gpt4 book ai didi

java - 附加到 JComboBox 的 ItemListener 的问题

转载 作者:行者123 更新时间:2023-11-29 05:49:56 25 4
gpt4 key购买 nike

请看下面的代码

    import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class ComboIssue extends JFrame
{
private JRadioButton rOne, rTwo;
private ButtonGroup group;

private JComboBox combo;

private JLabel label;

public ComboIssue()
{
rOne = new JRadioButton("One");
rOne.addActionListener(new ROneAction());
rTwo = new JRadioButton("Two");
rTwo.addActionListener(new RTwoAction());
group = new ButtonGroup();
group.add(rOne);
group.add(rTwo);

combo = new JComboBox();
combo.addItem("No Values");
combo.addItemListener(new ComboAction());

label = new JLabel("labellLabel");

this.setLayout(new FlowLayout());
this.add(rOne);
this.add(rTwo);
this.add(combo);
this.add(label);


this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

private class ROneAction implements ActionListener
{
public void actionPerformed(ActionEvent ae)
{
combo.removeAllItems();
combo.addItem("One");
}
}

private class RTwoAction implements ActionListener
{
public void actionPerformed(ActionEvent ae)
{
combo.removeAllItems();
combo.addItem("Two");
}
}

private class ComboAction implements ItemListener
{
public void itemStateChanged(ItemEvent ie)
{
if(ie.getStateChange() == ItemEvent.SELECTED)
{
label.setText("Selected");
}
}
}

public static void main(String[]args)
{
new ComboIssue();
}



}

我期待的是,

  1. 选择一个单选按钮。它将替换组合框中的值。
  2. 从组合框中选择一个值。现在 JLabel 文本将设置为“已选择”

但是,事实并非如此。相反,只要您选择一个单选按钮,JLabel 文本就会发生变化!!!为什么是这样?请帮忙!

最佳答案

这是因为 ComboAction 实现了 ItemListener。你不改变组合框的值(value)吗?当您选择单选按钮的值时?

更新:

好吧,你的代码有点问题。它改变了标签的值,因为你有一个 ItemListener。所以我采用了 PopupMenuListener 它将射击当列表变得不可见时。可以正常工作。

代码:

     import java.awt.event.*;
import java.awt.*;
import javax.swing.*;

public class ComboIssue extends JFrame
{
private JRadioButton rOne, rTwo;
private ButtonGroup group;

private JComboBox combo;

private JLabel label;

public ComboIssue()
{
rOne = new JRadioButton("One");
rOne.addActionListener(new ROneAction());
rTwo = new JRadioButton("Two");
rTwo.addActionListener(new RTwoAction());
group = new ButtonGroup();
group.add(rOne);
group.add(rTwo);

combo = new JComboBox();
combo.addItem("No Values");
combo.addPopupMenuListener(new javax.swing.event.PopupMenuListener() {
public void popupMenuCanceled(javax.swing.event.PopupMenuEvent evt) {
}
public void popupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt) {
jComboBox1PopupMenuWillBecomeInvisible(evt);
}
public void popupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) {
}
});

label = new JLabel("labellLabel");

this.setLayout(new FlowLayout());
this.add(rOne);
this.add(rTwo);
this.add(combo);
this.add(label);


this.pack();
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

private class ROneAction implements ActionListener
{
public void actionPerformed(ActionEvent ae)
{
combo.removeAllItems();
combo.addItem("One");
}
}

private class RTwoAction implements ActionListener
{
public void actionPerformed(ActionEvent ae)
{
combo.removeAllItems();
combo.addItem("Two");
}
}

private void jComboBox1PopupMenuWillBecomeInvisible(javax.swing.event.PopupMenuEvent evt) {
label.setText("selected");

}

public static void main(String[]args)
{
new ComboIssue();
}



}

关于java - 附加到 JComboBox 的 ItemListener 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14324514/

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