繁体   English   中英

使用Netbeans的Java GUI

[英]Java GUI using Netbeans

如果我在Frame代码中编写此命令以便在另一个框架中的TextField中设置文本,则在文本.setText使用.setText编写东西时会遇到问题,众所周知,Netbeans预加载GUI中的TextFields具有私有方法 任何克服这个问题的建议

我调用另一个框架在其中编写代码的代码,

private void jComboBox2ActionPerformed(java.awt.event.ActionEvent evt){                                          

    Tx_Customize l= new Tx_Customize();
   env_region = jComboBox2.getSelectedIndex(); 
   l.LF();
   System.out.println(env_region);

} 

另一帧在哪里

public void LF(){
    envi = S.env_region;
    System.out.println(envi);
     switch (envi)
            {
                case 1: 
                    Penetration.setText("21.5"); 
                    LNF.setText("10");
                    System.out.println("error1");
                    break;`  


                case 0: 
                    Penetration.setText("16.5"); 
                    LNF.setText("8");
                    System.out.println("error0");
                    break;

                case 2:
                    Penetration.setText("11"); 
                    LNF.setText("6");
                    System.out.println("error2");
                    break;

                case 3: 
                    Penetration.setText("7"); 
                    LNF.setText("6");
                    System.out.println("error3");
                    break;

                default : System.out.println("error");break;

            }
}

这与Swing无关,并且与一般的OOP惯例和Java没有关系:如果您需要允许一个类能够更改第二类的状态,请给第二类提供公共方法,以便第一类的对象可以呼叫。 如果需要调用私有方法,则可以包括包装方法。

要获得更详细的答案,则必须提出更详细的问题,其中包括相关代码。


编辑关于您的评论:

代码输入了它,但实际上并没有在第二帧的“ penetration and LNF”文本字段中写入任何内容,但是无论我从组合框中选择哪种情况,它都会显示System.out.println(“ error”)在第一帧中...我想因为这些在预加载的代码中是私有的,所以您知道一种方法吗

不,这与公共或私有绝对无关,而与代码中的错误有关。 如果是访问问题,您的代码将无法编译。 您的问题可能在这里:

private void jComboBox2ActionPerformed(java.awt.event.ActionEvent evt) 
{                                          
   Tx_Customize l= new Tx_Customize(); // *********
   env_region = jComboBox2.getSelectedIndex(); 
   l.LF();
   System.out.println(env_region);
} 

您正在创建一个全新的Tx_Customize,在其上调用方法,并期望它可以神奇地更改另一个Tx_Customize对象(显示的对象),而Java无法以这种方式工作-这是没有魔术的。 如果要更改显示的Tx_Customize对象的状态,则必须在此对象上调用方法,而不是在此方法中创建的某些新Tx_Customize。


编辑2

其他一般问题:

  • 您的程序应该只有一个主JFrame。
  • 如果您绝对需要显示第二个窗口之外的另一个窗口,则它应该是一个对话框,例如JDialog。
  • 您是Swing的新手,因此,不应使用Swing代码生成器,因为它会妨碍您学习库的工作原理。 而是使用教程手动编写Swing。
  • 您还将需要学习基本的Java,以了解该语言的构造块,对象的工作方式,它们与变量的区别等。阅读Java课本或教程的简介,因为它将极大地帮助您。 。 它帮助了我。
  • 学习并遵循Java命名约定,包括为类提供以大写字母开头的名称以及为方法和变量以小写字母开头的名称。 当您希望其他人(我们!)理解您的代码时,这一点很重要。

编辑3
您声明:

所以你的意思是我应该通过以下方式调用LF方法:Tx_Customize.LF();

哎呀 这将要求该方法是静态的。 我建议您以某种方式获取对实际显示的其他对象的引用,并从中调用该方法。 如何获得该参考将取决于很多事情,包括您未向我们展示的代码。


编辑4
你问:

我想问一个问题@HoverCraftFullOfEels,该引用的主要用途是什么,因为这是我第一次听到它

您的问题(我相信-但我不能肯定地说,因为我们只看到了有限的代码)是由于您存在多个Tx_Customize对象。 我猜想Tx_Customize扩展了JFrame,并且您已经显示了其中之一。 然后,在jComboBox2ActionPerformed方法中,创建第二个Tx_Customize实例并尝试在其上调用方法,但这不会对原始Tx_Customize对象产生影响。 相反,您必须在实际显示的Tx_Customize对象上调用一个方法。

请理解,变量与对象不是同一回事,并且引用(非原始)变量只能引用对象。 这就是我所说的参考 您需要在其上调用LF()的变量(尽管您实际上应该重命名此方法)才能引用实际显示的Tx_Customize对象。

为此,保存jComboBox2ActionPerformed方法的类必须具有引用显示的Tx_Customize的变量。 再次,请参见我对类似问题的答案,您可以在这里找到,它显示了一个示例,即通过构造函数参数获取引用,然后在变量中调用在事件中保留引用的方法,驱动设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM