按钮ActionListener同时运行两个组合框选项为什么?

时间:2014-02-25 20:15:42

标签: java button combobox listener actionlistener

您好我的comboBox有问题。在应用程序中我正在制作我的面板有一个带有两个选项的组合框和一个组合框旁边的按钮,以进入在组合框中选择的选项,但是如果语句运行而不是我不知道为什么。

组合框代码很简单私有JComboBox mainChoice = new JComboBox();

mainChoice.addItem(“”)等......

class mainPanelGoButtonListener implements ActionListener
{
    public void actionPerformed(ActionEvent ae) 
    {
        String choice = (String)mainChoice.getSelectedItem();

        System.out.printf(choice);

        if(choice == "View Passenger Details");
        {
            JTextField first = new JTextField();
            JTextField last = new JTextField();

            Object[] message = {  
                    "First Name:", first,  
                    "Last Name:", last
            };  

            int option = JOptionPane.showConfirmDialog(null, message, "Enter passenger name", JOptionPane.PLAIN_MESSAGE);

            if (option == JOptionPane.OK_OPTION)  
            {  
                // Load passenger data
                p = dataHandler.getPassengerData(first.getText(), last.getText());
                if(p != null)
                {
                    updateTextfields( p);
                    // Display passenger data
                    getContentPane().removeAll();
                    getContentPane().add(passengerDetailsPanel);
                    setSize(400,340);
                    setLocationRelativeTo(null);
                    validate();
                    repaint();
                    printAll(getGraphics());
                }
            }
        }

        if(choice == "Add New Passenger")
        {
            if(displayPassengerInputForm());
            {
                // Display passenger data
                getContentPane().removeAll();
                getContentPane().add(passengerDetailsPanel);
                setSize(400,340);
                setLocationRelativeTo(null);
                validate();
                repaint();
                printAll(getGraphics());
            }
        }

    }
}

//返回窗口A和窗口B的程序示例

import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

public class Frame extends JFrame
{
private JPanel mainPanel = new JPanel();
private JComboBox<String> mainChoice = new JComboBox<String>();
private JButton goButton = new JButton("GO");

public Frame()
{
    createMainPanel();
    this.add(mainPanel);
}


private void createMainPanel()
{
    // Fill choice box
    mainChoice.addItem("Find Passenger");
    mainChoice.addItem("Add New Passenger");

    // Set button

    goButton.addActionListener(new mainPanelGoButtonListener());
    goButton.setPreferredSize(new Dimension(5,5));

    // Add to main panel
    mainPanel.setLayout(new GridLayout(1,2,4,4));
    mainPanel.add(mainChoice);
    mainPanel.add(goButton);

}


class mainPanelGoButtonListener implements ActionListener
{
    public void actionPerformed(ActionEvent ae) 
    {       
        if(mainChoice.getSelectedItem().equals("Find Passenger"));
        {
            // DISPLAYS WINDOW FOR INPUT
            System.out.printf(" WINDOW A ");

        }

        if(mainChoice.getSelectedItem().equals("Add New Passenger"));
        {
            // DISPLAYS WINDOW FOR INPUT
            System.out.printf(" WINDOW B ");
        }
    }
}

public static void main(String args[])
{
    Frame frame = new Frame();
    frame.setTitle("SSD Project");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setLocationRelativeTo(null);
    frame.setSize(400,50);
    frame.setVisible(true);
}

}

每次按下按钮,它都会打印出窗口A和窗口B,而不是一个

1 个答案:

答案 0 :(得分:0)

我看到的一个问题是您使用==来比较字符串。

不要使用==来比较字符串,因为这会比较两个字符串 对象 是否相同,这是您不想测试的内容。使用equals(...)equalsIgnoreCase(...)方法测试两个字符串是否包含相同的字符,顺序相同,分别有或没有相同的情况,这就是您真正感兴趣的内容。

  • 下一步:确保使用if (something) { xxxx } else if (somethingElse) { xxxx }确保只执行一个if块。
  • 下一步:查看CardLayout,它将允许您的GUI更清晰地更改视图。

修改
你问:

  

你的意思是:mainChoice.getSelectedItem()。equals(“Add New Passenger”)??因为我仍然得到相同的结果;

是的,确切地说。但是经过进一步的反思,上面的代码不能同时导致阻塞,因为String ==对于两个测试字符串都不能为真。还有其他因素导致你的问题。

  你可以给我一些简单的例子吗?

实际上,如果你能创建并发布一个为我们重现问题的minimal runnable program会更好。