0

我已经尝试了一段时间来获得一个 JButton 我必须返回一个字符串并且我让它在一定程度上工作但是它只在我使用 System.out.println() 方法时才有效。

我的相关代码:

private String answer;

public void inputDataButton(JButton inButton)
{
inButton.addActionListener(new Action1());
}

public String returnAnswer()
{
return answer;
}

private void fileAnswer(String inString)
{
answer = new String(inString);
}

public class Action1 implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        String sub = JOptionPane.showInputDialog("Input The Date");
        fileAnswer(sub);
    }
}

用我的主要控制它:

public class test
{
    protected static JTextField text;

    public static void main(String[] args)
    {
    javaUI base = new javaUI("Date Killer", 800, 800);

    JLabel label = new JLabel("Place Holder");
    base.addLabel(label, 1, 0, false);

    JButton button = new JButton("Press Here");
    base.addButton(button, 0, 0, false);

    String str = "EMPTY";

    base.inputDataButton(button);

    while (str == "EMPTY")
        {
        str = base.returnAnswer();
        }

    System.out.println(str + " TEST");
    label.setText(str + "SETTED");
    }
}

JavaUI 只是另一个类,它简化了标签、按钮等的整个 JFrame 和 Jpanel 设置。

无论如何,这是我的问题。在主类中,在 while 语句中,如果我后面直接有 System.out.println() 语句,则 str 被成功设置为字符串。 这显然会使终端变得一团糟,因为它会重复“EMPTY”100 多次,直到按下按钮。

但是,如果我删除该语句,则显然不会打印任何内容,但 str 也从未设置为 str 。

我已经搞砸了很长一段时间(所有java UI的新东西,主要只是在计算部分工作)而且我还没有找到一个不会弄乱我的终端的工作解决方案. 感谢大家的帮助!!!

凯尔

4

1 回答 1

1

1)使用循环“等待”动作发生有点奇怪。您可以查看您的 cpu 使用情况,如果它永远循环,它可能会死机。

2)此外,无论您的按钮是否被单击,该方法都会返回 - 在动作发生之前,该方法会null根据您的代码返回一个字符串。而在你的主要方法中,str == "EMPTY"第一轮之后很快就会变成假的。然后您会在屏幕上看到“null TEST”。


尝试将while循环后的代码放入actionPerformed方法或fileAnswer方法中并删除循环:

public void actionPerformed(ActionEvent e)
{
    String sub = JOptionPane.showInputDialog("Input The Date");
    System.out.println(sub + " TEST");
    label.setText(sub + "SETTED");
}

另外,我不确定你为什么打电话给answer = new String(inString). 如果你想将它分配给另一个变量,你只需要调用,answer = inString因为 String 是不可修改的。在这种情况下,你不要这样做。

于 2013-03-01T11:11:43.400 回答