我正在使用netbeans来编写带有用户界面的东西......
我有一个名为“NewJFrame.java
”(A
)的主类和另外一个类
名为“NewClass.java
”(B
)的名称。类A
已扩展到类B
,如下所示:
public class NewClass extends NewJFrame{
...
}
ClassA
的内容是这样的公共静态:
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文件中的代码对吗?
答案 0 :(得分:1)
您遇到的问题与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中设置,而不是您想要的。
关于
Tushar Joshi,那格浦尔
答案 1 :(得分:0)
AFAIK Netbeans阻止你手工编辑GUI,并且根据你所拥有的奇怪问题而行为不同......但是几个月前,我不知道当前的版本是否太糟糕了。
答案 2 :(得分:0)
我真的不明白为什么你强迫自己为此使用新课程?即使你需要,我也不明白为什么NewClass 扩展 NewJFrame,因为你只是创建一个实例来调用一个与GUI无关的方法。
我认为创建NewClass不是必需的。在一个类中编写所有代码本身并不坏。这真的取决于许多因素:“所有代码”多少钱?分开责任是否有意义?等等...
因此,要使JTextField和JButton不是静态的而不是公开的,只需在那里做所有事情:
private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {
String str = TextBox1.getText();
TextBox1.setText(str + "1"); //This part isn't work.
JOptionPane.showConfirmDialog(null,Str,"22222222",JOptionPane.PLAIN_MESSAGE);
}
P.S。:变量名称以小写字母开头:String str ,而不是String Str 。
答案 3 :(得分:0)
我找到了解决方案。我正在扔掉我将要使用的内容。这是一个例子:
主要课程:
private void formWindowOpened(WindowEvent evt) {
Tab1Codes tc1 = new Tab1Codes();
if(!tc1.LockAll(TabMenu1))
System.exit(1);
tc1.dispose();
}
我添加了一些代码的另一个类:
public boolean LockAll(javax.swing.JTabbedPane TabMenu){
try
{
TabMenu.setEnabledAt(1, false);
TabMenu.setEnabledAt(2, false);
TabMenu.setEnabledAt(3, false);
TabMenu.setEnabledAt(4, false);
}catch(Exception e)
{
JOptionPane.showConfirmDialog(null, "I can't Lock the tabs!",
"Locking tabs...",
JOptionPane.PLAIN_MESSAGE,
JOptionPane.ERROR_MESSAGE);
return false;
}
return true;
}
因此,我可以编辑另一个类中的内容,但发送我想要阅读和编辑的每个内容都没用。 如果有人知道任何简短的方法,请写在这里。