0

クラスの 1 つのプリミティブ アドレス帳のコードを書いています。アドレス帳自体にクラスを使用し、次に新しいエントリを入れるために別のクラスを使用する必要があります。これは理解できますが、新しい連絡先を入力するためのクラス メソッドを呼び出すときに、GUI を変更したいと考えています。私は JFrame を使用しているので、GUI ベースにはcontentPane. 私の最初のクラスcontentPaneでは、基本的な GUI を使用して作成しました。

public class Address extends JFrame implements ActionListener
{
    Container contentPane;

    public Address()
    {
        super();
        contentPane = getContentPane();
        contentPane.setLayout(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setTitle("Address Book");
        setSize(775,775);
        setLocation(0,0);
        setBackground(Color.BLUE);
    }
}

contentPaneそして、2 番目のクラスである入力クラスで、 withをクリアしたいと思いcontentPane.removeAll()ます。

class Entries
{
    public void newContact()
    {
        contentPane.removeAll();
    }
}

残念ながら、私のクラスのエントリには何も認識されておらず、contentPane他の変数を変更しようとしています。クラス Address の変数やその他の変数に名前を付けて、エントリで使用できるようにする特別な方法はありcontentPaneますか?それとも、変数を再作成する必要がありますか?

4

3 に答える 3

1

のオブジェクトを作成するときは、変数を使用できるようにオブジェクトEntriesへの参照を与える必要があります。Addressプログラムのレイアウトがどのように設定されているかわかりませんが、呼び出しEntries内で作成された場合、または両方のクラスの親からのものである場合は、変数を設定する必要があります...AddressEntries entry = new Entry(this);

Address address = new Address();
Entries entry = new Entry(address);

エントリでアクセスする方法のコード:

class Entries
{
    private Address reference;

    public Entries(Address reference) {
        this.reference = reference;
    }

    public void newContact()
    {
        reference.contentPane.removeAll();
    }
}
于 2013-01-25T15:06:12.730 に答える
0

contentPaneの参照をコンストラクター引数としてEntriesに渡すか、contentPaneプロパティ(getter、setter)をEntriesに追加する必要があります。

于 2013-01-25T15:05:29.743 に答える
0

変数にアクセスするには、参照が必要です。変数を複製して、Entries コンストラクターで contentPane を指定します。

private Container contentPane;

public Entries(Container contentPane) {
    this.contentPane = contentPane;
}

または、Address クラスの contentPane に getter を作成し、contentPane を渡します。

私の意見では、両方のソリューションは非常に悪いですが、エントリ クラスの JPanel を拡張することを検討し、エントリをメインの contentPane に追加すると、エントリ クラスで必要な UI を実行できるようになります。

于 2013-01-25T15:06:46.253 に答える