IF语句在JAVA中的ActionPerformed方法中

时间:2012-03-23 09:50:43

标签: java swing

我正在尝试构建一个基本游戏,用户对州首府的知识进行测试。在这个阶段,我只是尝试为按钮设置一些基本功能。

我正在尝试这样做,以便当用户输入对应于正确答案的字符串时,程序显示“正确!”。我尝试过使用IF ELSE语句,但即使输入正确的答案,它也输出“错误!”。它可能很简单但我无法发现它。如果有人能指出我正确的方向,将非常感激。我是一个非常初学者,所以也许这完全是错误的方式,但到目前为止这是我所拥有的:

public class Main {

    public static void main(String[] args){

        Gui a = new Gui();

    }

}

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

public class Gui extends JFrame{
    private static final long serialVersionUID = 1L;

        JPanel row1 = new JPanel();
        JLabel instructions = new JLabel("What is the capital of Alabama?");

        JPanel row2 = new JPanel();
        JLabel aLabel = new JLabel("Answer: ");
        JTextField aField = new JTextField(14);

        JPanel row3 = new JPanel();
        JButton submit = new JButton("Submit");
        JButton reset = new JButton("Reset");

    public Gui() {

        super("State Capitals Game");
        setLookAndFeel();
        setSize(400, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
        setResizable(false);

        setLayout(new GridBagLayout());
        GridBagConstraints gc = new GridBagConstraints();

        gc.insets = new Insets(5,5,5,5);

        gc.gridx = 0;
        gc.gridy = 0;
        add(instructions, gc);

        gc.gridx = 0;
        gc.gridy = 1;
        add(aLabel, gc);

        gc.gridx = 0;
        gc.gridy = 2;
        add(aField, gc);

        gc.gridwidth = 3;
        gc.fill = GridBagConstraints.HORIZONTAL;
        gc.gridx = 0;
        gc.gridy = 4;
        add(submit, gc);

        ///this is where I'm stuck////

        submit.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                String userIP = aField.getText();

                String mg = "Montgomery";
                if(userIP == mg){
                    System.out.println("correct!");
                }else{
                    System.out.println("WRONG!");
                }

            }
        });

        gc.gridwidth = 3;
        gc.fill = GridBagConstraints.HORIZONTAL;
        gc.gridx = 0;
        gc.gridy = 5;
        add(reset, gc);

        reset.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                reset.getInputMap().put(KeyStroke.getKeyStroke("ENTER"), "pressed");
                aField.setText("");             
            }
        });
    }

    private void setLookAndFeel() {

        try {
            UIManager.setLookAndFeel(
                "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"
            );
        } catch (Exception exc) {
            // ignore error
        }

    }

}

7 个答案:

答案 0 :(得分:2)

比较字符串时,应使用equals()方法:

String mg = "Montgomery";
                if(userIP.equalsIgnoreCase(mg)){ // like this
                    System.out.println("correct!");
                }else{
                    System.out.println("WRONG!");
                }

否则你不会比较字符串的内容,而是比较不是你想要的引用

编辑: 实际上,你可能想要的是使用equalsIgnoreCase(),因为如果用户输入“montgomery”,它将抛出一个假,因为equals是区分大小写的。你可以找到api here

答案 1 :(得分:1)

您不应该使用==比较字符串,而应使用equals,例如

if(userIP.equals(mg)){

==等式运算符测试物理相等性(即左右操作数引用相同的对象),而不是值相等(即左右操作数引用具有相同值的对象)。

答案 2 :(得分:1)

经典错误:使用equals来比较字符串,而不是==

答案 3 :(得分:1)

在比较String个对象时,解决方案很简单,您必须使用.equals()方法。

所以你会:

if(str1.equals(str2)) { 
//code goes here 
}

实际上,在比较任何类型的java对象时,通常必须使用equals方法。但请注意,对于某些人,必须创建自定义比较器,或覆盖compareTo方法。但这只是额外的信息。

答案 4 :(得分:1)

您可以比较为

如果(userIP.equals(毫克))

答案 5 :(得分:1)

好的,首先你不应该将字符串与==进行比较!用户等于()。

在你的情况下,如果(mp.equals(userIP)){...

答案 6 :(得分:1)

不要使用 ==比较字符串比较引用,而不是值。

改为使用.equals

继续阅读answer/s for more detailed explanation.