2013-03-01 21 views
0

我一直在尝试一段时间得到一个JButton我必须返回一个字符串,我有它在一定程度上工作,但它只适用于当我使用System.out.println()方法。从JButton press Action Listener返回一个字符串?

我的相关代码:

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被成功设置为字符串 这显然使终端变得非常混乱,因为它重复“空”100次直到按下按钮。

但是,如果我删除该语句,显然没有什么是打印出来的,但是str永远不会设置为str。

我一直在这里乱搞了很长一段时间(新的所有Java UI的东西,主要只是在计算部分的东西),我还没有找到一个工作的解决方案,不做一个我的终端一团糟。感谢所有的帮助!

Cail

+0

什么是使其工作的'System.out.println()'语句?而且,为什么'while.'循环中的'base.returnAnswer()'?每次调用它时是否返回不同的答案? – 2013-03-01 10:34:43

+0

由于我不知道按钮将被按下的位置,因此我为循环直到字符串不是“空”的字符串设置了一个while循环。但是,如果循环内部有一个System.out.println(str)语句,它只会退出循环,否则会变得无止境。 – 2013-03-01 10:38:59

回答

1

1)这是一个有点陌生,使用循环“等待”的动作发生。你可以看你的CPU使用情况,如果它永远循环,它可能会死机。

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


尝试把代码之后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因为字符串是不可修改的。在这种情况下,你不要这样做。

+0

哎呀,对不起答案=新的字符串(inString)部分,在我最近的代码中我改变了这一点。我可以这样做,除了我真正想要做的是将其馈送给main并将输入的字符串放入str中,因为我打算将其用于进一步计算,标签不是必需的,仅用于视觉方面完成的程序,我想要做的是获得按钮按下将输入的字符串返回到主要的字符串str。感谢您的帮助!:) – 2013-03-01 11:59:29

+0

@CailDemetri不客气。关键是按下按钮后要做的任何计算,您应该在我所展示的'actionPerformed()'方法中调用它。我只是在你的问题中采用了这个例子。无论如何你需要改变设计。或者你能否展示原始要求,我可以帮助你制定一个更合适的方式来完成这项工作。 – shuangwhywhy 2013-03-01 14:05:25

+0

ahhh,我明白你的意思了,我可以尝试为计算创建一个静态类。至于我想要做的是创建一种日历程序,除了它的别人,所以我不能做任何通过命令提示符的输入。所以我试图让用户通过按下按钮创建的输入对话框输入日期,即抓住输入的字符串并对其执行计算。问题是我无法弄清楚如何将所述字符串返回到我的主要。我可能会尝试与另一个班,但我宁愿在主要做。感谢您澄清:D – 2013-03-02 03:54:15