Java 如何从JFrame 2中检索JFrame 1中设置的类字段

Java 如何从JFrame 2中检索JFrame 1中设置的类字段,java,swing,reference,Java,Swing,Reference,你好, 我是Java编程的新手,目前正在上这门课。我们现在正在进行一个项目,任务是创建我们自己的类。到目前为止,我取得了成功。我的应用程序有两个JFrame表单(JFrame1和JFrame2)。我使用的是NetBeans 7.3.1 IDE,JFrame1被设置为主类 当我运行应用程序时,会打开JFrame1,我使用以下代码使用按钮设置类“company”中字段的值: 在“company”类中设置值后,表单关闭并打开myJFrame2,其中有一个名为“lbl_company_name”的标签

你好,

我是Java编程的新手,目前正在上这门课。我们现在正在进行一个项目,任务是创建我们自己的类。到目前为止,我取得了成功。我的应用程序有两个JFrame表单(JFrame1JFrame2)。我使用的是NetBeans 7.3.1 IDE,JFrame1被设置为主类

当我运行应用程序时,会打开JFrame1,我使用以下代码使用按钮设置类“company”中字段的值:

在“company”类中设置值后,表单关闭并打开myJFrame2,其中有一个名为“lbl_company_name”的标签。我想使用以前使用JFrame1设置的“公司”类的字段值设置此标签的文本属性

这就是我到目前为止所尝试的,标签被更改为一系列空值。我有一种感觉,这是因为我正在使用“new”关键字创建一个新对象,而不是具有我需要的数据的对象。我说得对吗

public class JFrame2 extends javax.swing.JFrame
  {

    //Create company object and assign it to myCompany
    company myCompany = new company(null, null, null, null, null);

    public void showCompanyInfo()
      {
        // Define variables and assign to them fields from my Company class
        String name = myCompany.get_company_name();
        String street = myCompany.get_company_street();
        String city = myCompany.get_company_city();
        String state = myCompany.get_company_state();
        String zip = myCompany.get_company_zipcode();

        // Use the variables above to manipulate the display of a label
        lbl_company_name.setText(name + " | " + street + "," + city + "," + state + " " + zip);
      }

    /**
     * Creates new form JFrame2
     */
    public JFrame2()
      {
        initComponents();
        jPanel1.setVisible(false);
        showCompanyInfo();
      }
  }

非常感谢您的帮助,谢谢。

作为一种非常粗糙的方式,我可以很快提出以下建议。在JFrame1类中添加一个getter:

public class JFrame1 extends javax.swing.JFrame
{

    //Create company object and assign it to myCompany
    company myCompany = new company(null, null, null, null, null);

    public company getCompany() {
        return myCompany; // return your myCompany object where everything is set from fields
    }

    //... rest of your code in JFrame1...
然后在JFrame2中,删除
company
字段(您现在正在那里创建一个新实例,因此所有实例都为空!),并将
company
参数添加到
showCompanyInfo()
方法:

public class JFrame2 extends javax.swing.JFrame
{


    public void showCompanyInfo(company c)
    {
        // Define variables and assign to them fields from my Company class
        String name = c.get_company_name();
        String street = c.get_company_street();
        String city = c.get_company_city();
        String state = c.get_company_state();
        String zip = c.get_company_zipcode();

        // Use the variables above to manipulate the display of a label
        lbl_company_name.setText(name + " | " + street + "," + city + "," + state + " " + zip);
      }

    /**
     * Creates new form JFrame2
     */
    public JFrame2()
      {
        initComponents();
        jPanel1.setVisible(false);
        showCompanyInfo(jPanel1.getCompany());
      }
  }

作为旁注,类名称使用驼峰大小写,即
公司
对类来说是个坏名字,
公司
更好。对于方法,同样使用驼峰大小写,snake大小写(带下划线)不会很好地使用Java Bean概念,即将所有
get\u company\u name()
重命名为
getCompanyName()
等。

忘记特定的代码解决方案,相反,您应该关注您的基本问题:

  • 您为每个类指定了它自己的公司对象(同样,无论讲师怎么说,类名的第一个字母都应该是大写),对一个公司对象所做的更改不会反映在另一个公司对象中,因为它们是完全独立的唯一对象
  • 为了解决这个问题,两个类应该共享同一个公司对象。这可以通过构造函数参数或setter方法从一个字段传递到另一个字段,
    setCompany(Company myCompany)
    与设置任何字段相同
  • 代码的详细信息应该由您来确定。处理其他人的答案时,您的主要问题是您复制的是代码,而不是想法。用我和他们的想法编写你自己的代码,你会有更顺利的航行和更好的理解
  • 正如我在评论中所说的,向用户吐出不同的JFrame是一个糟糕的设计,你会发现很少有程序能做到这一点。相反,交换视图,通常是保存复杂GUI的JPanel,通过

你的
公司类在哪里?
?哎呀,我会更新这个问题。公司类内容与这个问题无关,请参阅我的答案。你不应该同时显示两个JFrame或将一个JFrame替换为另一个JFrame。依赖的第二个窗口应该是一个对话框,比如JDialog,或者您应该通过CardLayout交换同一JFrame中的视图。对于您当前的问题,我强烈建议您使用CardLayout并交换JPanel视图。谢谢,但在NetBeans出现无法找到符号的错误之前,我没走多远。回来后我的公司在上面画了线。我假设您希望我替换JFrame1类中创建新公司对象的那一行-对吗?因为我就是这么做的。我没有尝试你建议的其他代码。我会等待你的答复,谢谢。不,我不是这么说的。让myCompany保持JFrame1中的状态,它是一个字段。您需要为它创建一个访问器方法:
getCompany
。然后从JFrame2中删除
myCompany
,因为你不需要它,或者你可以把它放在那里-这没关系,但你不需要它,它会部分导致你的困惑。谢谢,但还是没有运气。这次调用showCompanyInfo(jPanel1.getCompany())时出错;错误如下:类JFrame2中的showCompanyInfo方法无法应用于给定类型;必需:公司找到:无参数原因:实际参数列表和正式参数列表长度不同您没有按照我的要求更改
showCompanyInfo
方法。请注意,我正在注意,我按照你的要求做了。引发错误的唯一一行是对showCompanyInfo()的调用。还有,我注意到你把jPanel1放在这里-为什么?我已经在用这个面板做其他事情了。谢谢你的建议——现在我正在创建我公司类的两个独立对象,这对我来说很有意义。我会采纳我收到的所有想法并提出解决方案。
public class JFrame2 extends javax.swing.JFrame
{


    public void showCompanyInfo(company c)
    {
        // Define variables and assign to them fields from my Company class
        String name = c.get_company_name();
        String street = c.get_company_street();
        String city = c.get_company_city();
        String state = c.get_company_state();
        String zip = c.get_company_zipcode();

        // Use the variables above to manipulate the display of a label
        lbl_company_name.setText(name + " | " + street + "," + city + "," + state + " " + zip);
      }

    /**
     * Creates new form JFrame2
     */
    public JFrame2()
      {
        initComponents();
        jPanel1.setVisible(false);
        showCompanyInfo(jPanel1.getCompany());
      }
  }