0

再会,

我是 Java 编程的新手,目前正在学习这方面的课程。我们现在正在做一个项目,我们的任务是创建自己的类。到目前为止,我已经成功了。我的应用程序具有两种 JFrame 形式(JFrame1JFrame2)。我使用的是 NetBeans 7.3.1 IDE,并且 JFrame1 设置为主类。

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

这是我的公司课程的链接

public class JFrame1 extends javax.swing.JFrame
  {

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

    private void btn_okActionPerformed(java.awt.event.ActionEvent evt)                                       
    {                                           
        // TODO add your handling code here:

        //Create variables to hold the user input from the form
        String name = txt_company_name.getText();
        String street = txt_address_street.getText();
        String city = txt_address_city.getText();
        String state = txt_address_state.getText();
        String zip = txt_address_zipcode.getText();

        //Assign the form data to the fields in the company class
        myCompany.set_company_name(name);
        myCompany.set_company_street(street);
        myCompany.set_company_city(city);
        myCompany.set_company_state(state);
        myCompany.set_company_zipcode(zip);

        //Display a friendly message informing user that input has been accepted
        //then hide this form and display JFrame2.
        JOptionPane.showMessageDialog(null, "Company data entered successfully, "
                + "application will now open.\nClick OK to proceed.", "THANK YOU!",
                JOptionPane.INFORMATION_MESSAGE);
        new JFrame2().setVisible(true);  //Create new instance of my JFrame2 form and make it visible
        this.setVisible(false); //Hide this form from view
    } 
  }

在“公司”类中设置值后,表单关闭并打开我的JFrame2,其中有一个名为“ 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();
      }
  }

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

4

2 回答 2

1

忘记特定的代码解决方案,而应该专注于您的基本问题:

  • 您为每个班级提供了自己的 Company 对象(同样,班级名称的第一个字母应该是大写,无论您的讲师说什么),并且对一个 Company 对象所做的更改不会反映在另一个 Company 对象中,因为它们是完全独立的独特的对象。
  • 为了解决这个问题,两个类应该共享同一个 Company 对象。这可以通过构造函数参数或通过 setter 方法从一个传递到另一个,setCompany(Company myCompany)就像设置任何字段一样。
  • 代码细节应该让你弄清楚。您处理其他人答案的主要问题是您正在复制代码而不是想法。用我和他们的想法编写你自己的代码,你会有更顺畅的航行和更好的理解。
  • 正如我在评论中所说,向用户吐出不同的 JFrame 是一种糟糕的设计,而且您会发现很少有程序可以做到这一点。而是通过CardLayout交换视图,通常是保存复杂 GUI 的 JPanel 。
于 2013-10-10T21:51:16.077 回答
0

作为一种非常粗略的方式,我可以快速提出以下建议。在您的 JFrame1 类中添加一个吸气剂:

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());
      }
  }

作为旁注,使用骆驼大小写的类名,即company一个类的坏名,Company更好。还对方法使用驼峰式大小写,蛇形大小写(带下划线)不能很好地与 Java Beans 概念配合使用,即将所有这些重命名get_company_name()getCompanyName()etc。

于 2013-10-10T20:52:51.363 回答