请查看以下代码
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();
}
}
这就是我所期待的,
但是,这不是正在发生的事情。相反,只要您选择单选按钮,JLabel文本就会更改!为什么是这样?请帮忙!
答案 0 :(得分:1)
这是ComboAction implements ItemListener
的结果。
你不是在改变组合框的价值吗?
当您选择单选按钮的值时?
<强>更新强>
嗯,你的代码有点问题。当你有一个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();
}
}
答案 1 :(得分:1)
因为你的单选按钮的动作监听器中有这个代码
combo.removeAllItems();
当您单击单选按钮时,然后在将特定单选按钮文本添加到组合框之前,您将删除所有项目
在此之后,JComboBox
中剩下的唯一项目是在点击单选按钮后添加的项目,默认情况下该项目会调用JComboBox
的{{1}},然后更改itemStateChanged
上的文字1}}
答案 2 :(得分:1)
这里需要做一些小改动
private class ROneAction implements ActionListener
{
public void actionPerformed(ActionEvent ae)
{
label.setText("Nothing Selected");
combo.removeAllItems();
combo.addItem("One");
}
}
private class RTwoAction implements ActionListener
{
public void actionPerformed(ActionEvent ae)
{
label.setText("Nothing Selected");
combo.removeAllItems();
combo.addItem("Two");
}
}
private class ROneAction implements ActionListener
{
public void actionPerformed(ActionEvent ae)
{
combo.removeAllItems();
combo.addItem("Select");
combo.addItem("One");
}
}
private class RTwoAction implements ActionListener
{
public void actionPerformed(ActionEvent ae)
{
combo.removeAllItems();
combo.addItem("Select");
combo.addItem("Two");
}
}
private class ComboAction implements ItemListener
{
public void itemStateChanged(ItemEvent ie)
{
if(ie.getItem().equals("Two"))
{
label.setText("Two Selected");
} else if(ie.getItem().equals("One") ) {
label.setText("One Selected");
}
}
}