Java 从JButton按键操作侦听器返回字符串?

Java 从JButton按键操作侦听器返回字符串?,java,swing,jframe,jbutton,output,Java,Swing,Jframe,Jbutton,Output,我已经尝试了一段时间来获取一个JButton,我必须返回一个字符串,我让它在一定程度上工作,但是它只在我使用System.out.println()方法时工作 我的相关代码: private String answer; public void inputDataButton(JButton inButton) { inButton.addActionListener(new Action1()); } public String returnAnswer() { return answer

我已经尝试了一段时间来获取一个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");
    }
}
由我主控:

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设置

不管怎样,这是我的问题。在main类中的while语句中,如果后面有System.out.println()语句,则str成功设置为字符串。 这显然使终端变得相当混乱,因为它重复“清空”100多次,直到按下按钮为止

但是,如果我删除该语句,显然不会输出任何内容,但是str也不会设置为str

我已经在这方面做了很长一段时间了(对于所有java UI来说都是新的,主要是在计算部分),但我还没有找到一个有效的解决方案,不会把我的终端弄得一团糟。谢谢你的帮助

Cail

1)使用循环来“等待”动作的发生有点奇怪。你可以观察你的cpu使用情况,如果它永远循环,它可能会死掉

2) 此外,无论是否单击按钮,该方法都将返回—在操作发生之前,该方法根据您的代码返回一个
null
字符串。在main方法中,
str==“EMPTY”
在第一轮之后很快变为false。然后您将在屏幕上看到“空测试”


尝试将
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=newstring(inString)
。若要将其分配给另一个变量,只需调用
answer=inString
,因为字符串是不可修改的。在本例中,您不需要这样做。

使其工作的
System.out.println()
语句是什么?还有,为什么
base.returnAnswer()
while
循环中?每次调用时它都会返回不同的答案吗?因为我不知道按钮将被按下的点,所以我为字符串设置了一个while循环,该循环会一直循环,直到字符串不是“空”为止。但是,只有当循环中有System.out.println(str)语句时,它才会退出循环,否则它就会变得无穷无尽。哦,很抱歉,在我最近的代码中,我更改了这个部分。我可以这样做,除了我真正想做的是把它输入到main中,并把输入的字符串放入str中,因为我计划使用它进行进一步的计算,标签不是必要的,只是为了完成程序的视觉效果,我试图做的是按下按钮将输入的字符串返回到main中的字符串str中。谢谢你的帮助!:)@不客气。关键是,无论按下按钮后尝试进行什么计算,都应该在
actionPerformed()
方法中调用它,如我所示。我刚才在你的问题中举了个例子。你无论如何都需要改变设计。或者你可以展示一下最初的需求,我可以帮助你找到一个更合适的方法来完成这项工作。啊,我明白你的意思,我可以尝试创建一个静态类来进行计算。至于我要做的,是创建一种日历程序,除了它是为其他人,所以我不能通过命令提示符进行任何输入。因此,我试图让用户通过按下按钮创建的输入对话框来输入日期,该对话框抓取输入的字符串并对其执行计算。问题是,我不知道如何将所述字符串返回到主菜单中。我可以在另一节课上尝试,但我更愿意在主要课上尝试。谢谢你澄清这一点:D