Java 从JButton按键操作侦听器返回字符串?
我已经尝试了一段时间来获取一个JButton,我必须返回一个字符串,我让它在一定程度上工作,但是它只在我使用System.out.println()方法时工作 我的相关代码: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
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来说都是新的,主要是在计算部分),但我还没有找到一个有效的解决方案,不会把我的终端弄得一团糟。谢谢你的帮助
Cail1)使用循环来“等待”动作的发生有点奇怪。你可以观察你的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