0

良い一日、

私はJavaプログラミングの初心者で、現在これに関するクラスを受講しています。現在、独自のクラスを作成するプロジェクトに取り組んでいます。これまでのところ、私は成功しています。私のアプリケーションには、2 つの JFrame フォーム ( JFrame1JFrame2 ) があります。NetBeans 7.3.1 IDE を使用しており、JFrame1 がメイン クラスとして設定されています。

アプリケーションを実行すると JFrame1 が開き、次のコードを使用して、ボタンを使用してクラス「 company 」のフィールドの値を設定します。

これが私の会社のクラスへのリンクです

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
    } 
  }

「 company」クラスに値を設定した後、フォームが閉じて、「 lbl_company_name 」というラベルがあるJFrame2が開きます。JFrame1 を使用して以前に設定した " company " クラスのフィールドの値で、このラベルの text プロパティを設定したいと思います。

これは私がこれまでに試したことであり、ラベルは一連の null に変更されています。これは、「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 オブジェクトを与えています (講師が何を言っているかに関係なく、クラス名の最初の文字は大文字にする必要があります)。1 つの Company オブジェクトに加えられた変更は、完全に別のものであるため、他のオブジェクトには反映されません。ユニークなオブジェクト。
  • この問題を解決するには、両方のクラスが同じ Company オブジェクトを共有する必要があります。setCompany(Company myCompany)これは、任意のフィールドを設定するのと同じように、コンストラクター パラメーターまたはセッター メソッドを介して一方から他方に渡すことができます。
  • コードの詳細は、あなたが理解できるようにする必要があります。他の人の回答を処理する際の主な問題は、アイデアではなくコードをコピーしていることです。私と彼らのアイデアで独自のコードを書くと、よりスムーズな航海とより良い理解が得られます.
  • コメントで述べたように、ユーザーにさまざまな JFrame を吐き出すのは悪い設計であり、これを行うプログラムはほとんどありません。代わりに、 CardLayoutを介してビュー、通常は複雑な GUI を保持する JPanel を交換します。
于 2013-10-10T21:51:16.077 に答える
0

私がすぐに思いつくことができる非常に大雑把な方法として、次のことをお勧めします。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フィールドを削除し (ここで新しいインスタンスを作成しているため、すべて null です!)、メソッドに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 に答える