我目前正在处理一些代码,我遇到了一些麻烦。
我在GUI上有两个按钮。如果一个按钮被按下,它会将一个值赋给一个字符串,一个值来反映这一点。
除了为字符串分配了不同的值之外,另一个按钮与此按钮相同。
此字符串是在构造函数之前的开头创建的,其方式如下:
public string s = "String"; // public so I can call it in another class当我想要找出在另一个类中哪个按钮被按下时,问题就出现了。我想看看s是什么,所以我必须创建这个类的一个实例:
gui = new GUI(); 这会再次将s的值重置为"String“,这会破坏我的比较。
有什么办法可以绕过这个问题吗?
我尝试了很多想法,但似乎都不管用。
发布于 2009-03-03 16:17:58
最初创建图形用户界面(即GUI gui = new GUI();)时,请保存该引用,以便在需要访问成员s时使用。
当您创建一个新的图形用户界面对象时,这个新对象从未被用户操作过,因此它的s值就是"String"。您需要持有对原始对象的引用。
发布于 2009-03-03 16:18:40
更好的做法可能是将第一个表单的状态传递给第二个表单,或者让第一个表单实时通知第二个表单某个特定事件已经发生。否则,您将需要将第一个表单的引用传递给第二个表单,以执行您正在尝试的比较IE:
public class SecondForm {
private FirstForm _firstForm = null;
public SecondForm(FirstForm firstForm){
_firstForm = firstForm;
}
...
if(_firstForm.s == "comparison"){
...
}
}
SecondForm secondForm = new SecondForm(this);发布于 2009-03-03 16:18:15
在这篇文章下面的评论中,我和其他两个人决定你应该学习java语言,研究面向对象编程的概念(包括对象作用域),然后学习如何实现正确的事件处理代码-有几种方法可以实现你想要的,我建议结合我提供的代码和上面Welbog提供的参考建议(当然,这将需要修改我的代码,但如果你的主类在其他地方,实际上不是很多)。
基本上,google a java tutorial (或者买一本书/“获取”一本书),如果你知道一些基本概念,就跳到面向对象的部分。
如果我遵循你想要的,下面是一些框架代码:
// imports
public class GUI extends JFrame implements ActionListener {
public String s = "String";
public GUI() {
// initializer code for buttons
btn1.addActionListener(this);
btn2.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
if(s == "???")
s = "this";
else
s = "that";
}
// other methods
}https://stackoverflow.com/questions/607031
复制相似问题