【问题标题】:Output from JComboBox being printed twiceJComboBox 的输出被打印两次
【发布时间】:2015-04-18 20:48:49
【问题描述】:

我正在尝试从组合框中获取所选值以显示在提示窗口中,但提示窗口出现两次。我没有复制任何代码,但是为什么会这样呢?

代码 sn-p :-

package interfaceGUI;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JButton;

import java.awt.Button;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;

public class BirthdayForm extends JFrame{
private JLabel chooseItem;
private JLabel chooseQuantity;
private JComboBox items;
private JTextField quantity;
private JTextArea selection;
private JButton Rent;
private JButton Edit;
private JButton Cancel;

private JPanel choose;
private JPanel forButton;

private String list[] = {"Chair", "Napkin", "Garland", "Mirrored Ball", 
"Floral Vases", "Large Balloons", "Square Jars"};

public BirthdayForm()
{
    super("Birthday Party Supplies Rental Form");
    setLayout(new FlowLayout());

    chooseItem = new JLabel("Choose Item:");
    items = new JComboBox(list);

    chooseQuantity = new JLabel("Choose Quantity:");
    quantity = new JTextField(5);
    choose = new JPanel();
    choose.setLayout(new GridLayout(1,4));
    choose.add(chooseItem);
    choose.add(items);
    choose.add(chooseQuantity);
    choose.add(quantity);
    add(choose);

    selection = new JTextArea(15,30);
    add(selection);

    Rent = new JButton("Rent");
    Edit = new JButton("Edit List");
    Cancel = new JButton("Cancel");
    forButton = new JPanel();
    forButton.setLayout(new GridLayout(1,3));
    forButton.add(Rent);
    forButton.add(Edit);
    forButton.add(Cancel);
    add(forButton);

    comboHandler handler = new comboHandler();
    items.addItemListener(handler);
}

public class comboHandler implements ItemListener
{
    public void itemStateChanged(ItemEvent event)
    {
        if(event.getSource() == items)
        {
            String item = (String) items.getSelectedItem();
            if(item == "Chair")
            {
                JOptionPane.showMessageDialog(null, "Chair" , "Items", 
                                         JOptionPane.INFORMATION_MESSAGE);
            }
        }
        else
        {
        }
    }
}
}

我做错了什么?我找不到我的错误。请帮忙。

【问题讨论】:

  • 从事件中获取item状态,判断是否为选中状态,int state = event.getStateChange(); if(state == ItemEvent.SELECTED)
  • 你能提供更完整的答案吗?
  • 当然,看我的回答,itemStateChange 被触发两次,一次用于被取消选择的项目,一次用于被选择的项目
  • 更好的选择可能是使用 ActionListener

标签: java user-interface jframe jcombobox


【解决方案1】:

这里是你需要的改变,检查项目是否被选中,

public void itemStateChanged(ItemEvent event)
    {
        if(event.getSource() == items)
        {
            int state = event.getStateChange();
            if(state == ItemEvent.SELECTED)
            {
              String item = (String) items.getSelectedItem();
              JOptionPane.showMessageDialog(null, item , "Items", JOptionPane.INFORMATION_MESSAGE);
            }
        }
        else
        {
        }
    }

【讨论】:

  • 我明白了。非常感谢。
  • $Damini,我不清楚你的问题,你想对列表中的下一项进行 if 语句,关于列表中的下一项你想显示什么
  • 这是一个愚蠢的问题,抱歉,哈哈。没仔细看你的回答。非常感谢您解决了我的问题。
  • "if(item == "Chair")" - 真的吗?
  • @MadProgrammer,感谢您的提醒,我刚刚修改了代码。我只是想通过修改代码来回答这个问题。但确实如此,使用 if 语句,消息对话框只会在选择“椅子”时显示。
猜你喜欢
  • 2014-07-19
  • 2019-03-20
  • 1970-01-01
  • 2022-11-21
  • 2017-11-26
  • 1970-01-01
  • 2015-01-05
  • 1970-01-01
  • 2022-12-08
相关资源
最近更新 更多