我可以阅读,但无法编辑主类内容

时间:2010-11-06 09:15:01

标签: java netbeans

我正在使用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文件中的代码对吗?

4 个答案:

答案 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;
}

因此,我可以编辑另一个类中的内容,但发送我想要阅读和编辑的每个内容都没用。 如果有人知道任何简短的方法,请写在这里。