提问者:小点点

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


你好,我有一个问题与我的组合框。在应用程序中,我使我的面板有一个组合框,有两个选择和一个按钮旁边的组合框继续选择组合框,但相反,如果语句运行,没有我不知道为什么。

组合框代码简单私有JComboBox main Choice=new JComboBox();

main Choice. 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个答案

匿名用户

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

不要使用==来比较字符串,因为这是在两个String对象相同时进行比较,这是您不感兴趣的测试。使用equals(…)equalsIgnoreCase(…)方法来测试两个字符串是否包含相同的字符,以相同的顺序,分别具有或不具有相同的大小写,这才是您真正感兴趣的。

  • 下一步:确保您使用if(一些东西){xxxx}else if(一些东西){xxxx}来确保只有一个如果块被执行。
  • 接下来:查找CardLayout,它将允许您的GUI更干净地更改视图。

编辑
你问:

你的意思是:main Choice. getSelectedItem().equals("添加新乘客")吗??因为我仍然得到相同的结果;

是的,没错。但进一步思考,您上面的代码不能导致两个if块都触发,因为String==对于两个测试字符串都不可能为真。还有其他原因导致了您的问题。

你能给我举个简单的例子吗?

实际上,如果您可以创建并发布一个最小的可运行程序来为我们重现您的问题,那就更好了。