我正在使用 netbeans 来通过用户界面进行编程...
我有一个名为“NewJFrame.java
”(A
) 的主类和另一个类
名为“NewClass.java
”(B
)。类 A
扩展为类 B
,如下所示:
public class NewClass extends NewJFrame{
...
}
ClassA
的内容是公共(public)静态的,如下所示:
public static javax.swing.JTextField TextBox1;
我在 classA
中还有一个按钮。所以当我单击该按钮时,它会调用一个函数
来自 classB
并且该函数需要编辑 TextBox1
的文本...
这是我单击按钮时发生的情况:
private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {
String Str1;
NewClass nc = new NewClass();
Str1=nc.call();
}
这是ClassB
中的函数:
public String call()
{
String Str;
Str = TextBox1.getText();
TextBox1.setText(Str + "1"); //This part isn't work.
JOptionPane.showConfirmDialog(null,Str,"22222222",JOptionPane.PLAIN_MESSAGE);
return Str;
}
所以我可以读取 TextBox1
的文本并将其显示在消息框中,但无法编辑他的文本。
如果我将此代码放在主类中,它可以完美工作,但在另一个类中,它不起作用。
有人可以帮我解决这个问题吗?
(我使用的是 netbeans 6.9.1)
<小时/>我只是尝试使用另一个类来添加我的代码,因为我不希望所有代码都保留在同一个文件中,这没有用...来吧,有人需要知道如何做到这一点,而你不能全部编写*.java 文件中的代码对吗?
最佳答案
您遇到的问题与 NetBeans IDE 无关, 使用此代码的任何 IDE 都会遇到同样的问题。
实现此目的的一种方法是在 NewClass 中聚合 NewJFrame 类 而不是扩展它:
让我用一些代码来解释一下:
public class NewClass {
private NewJFrame frame = null;
public NewClass(NewJFrame frame) {
this.frame = frame;
}
public String call()
{
String text;
text = frame.TextBox1.getText();
frame.TextBox1.setText(text + "1"); //This will work now.
JOptionPane.showConfirmDialog(null,text,"22222222",JOptionPane.PLAIN_MESSAGE);
return text;
}
}
在这里,我们将收到对调用 JFrame 类的引用,并将使用字段 在该类中定义。
private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {
String Str1;
NewClass nc = new NewClass(this); // see the parameter we are passing here
Str1=nc.call();
}
当我们创建 NewClass 类的对象时,我们将传递该对象的引用 当前正在调用NewJFrame对象
这可以工作,检查一下。
现在来看看为什么你的代码不起作用。当NewClass扩展NewJFrame时 当您创建 NewClass 类的新对象时,它包含一个单独的 NewJFrame 的副本,与调用 NewJFrame 引用不同 该字段正在另一个 JFrame 中设置,而不是您想要的。
谨致
图沙尔乔希,那格浦尔
关于java - 我可以阅读但无法编辑主类内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4112542/