java初学者if / else如果有问题

时间:2011-07-21 14:43:00

标签: java

尝试设置String变量的代码块似乎出现了问题,因为无论我在运行程序时做什么,对话框总是会显示otto。有谁知道我在这里做错了什么?

谢谢, 猎食

import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JOptionPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class SmallTingz extends JFrame {
    private JLabel item1;
    private JTextField tf;
    private JTextField tf2;
    private JTextField tf3;
    private JPasswordField pf;

    public SmallTingz() {
        super("The Title");
        setLayout(new FlowLayout());
        JTextField tf = new JTextField("Cool Beans");
        JTextField tf2 = new JTextField("UnCool Beans");
        JTextField tf3 = new JTextField("Hot Beans");
        JPasswordField pf = new JPasswordField("password");

        add(tf);
        add(tf2);
        add(tf3);
        add(pf);

        thehandler handler = new thehandler();
        tf.addActionListener(handler);
        tf2.addActionListener(handler);
        tf3.addActionListener(handler);
        pf.addActionListener(handler);
    }

    private class thehandler implements ActionListener {

        public void actionPerformed(ActionEvent event) {
            String string;          
            if (event.getSource() == tf)
                string=String.format("field1: %s", event.getActionCommand());
            else if (event.getSource() == tf2)
                string=String.format("field2: %s", event.getActionCommand());
            else if (event.getSource() == tf3)
                string=String.format("field3: %s", event.getActionCommand());
            else if (event.getSource() == pf)
                string=String.format("passfield: %s", event.getActionCommand());
            else
                string="otto";

            JOptionPane.showMessageDialog(null, string);        
        }
    }
}

2 个答案:

答案 0 :(得分:12)

SmallTingz()构造函数中,删除所有变量声明。您的声明是hiding成员变量。

更改

JTextField tf = new JTextField("Cool Beans");
JTextField tf2 = new JTextField("UnCool Beans");
JTextField tf3 = new JTextField("Hot Beans");
JPasswordField pf = new JPasswordField("password");

tf = new JTextField("Cool Beans");
tf2 = new JTextField("UnCool Beans");
tf3 = new JTextField("Hot Beans");
pf = new JPasswordField("password");

答案 1 :(得分:1)

两件事。

首先,如果

,我总是随处可以使用括号
if(...){
//do stuff
}
else
{
  if(...)
  {
  // other stuff.
  }
}

它使阅读更容易。可读性是编写代码的最重要方面之一。

其次,这是学习如何使用调试器的好机会。我怀疑你正在使用eclipse。点击if(event.getSource()==tf)的边距 应该出现一个小红点,这是一个断点。现在以调试模式运行代码。

执行应该在该行停止。将鼠标光标悬停在“event”变量上。您应该会看到一个弹出窗口,显示该对象的描述。

这可以帮助您理解为什么GetSource()不返回指向您的JTextField的指针

也许你会看到tf是null,就像user802421所说的那样。