0

私には2つのクラスがあります

  1. 主要

  2. サブ

メインクラスには、ボタンとjtextareaがあります

サブクラスでは、ボタンがあります

メインクラスのボタンをクリックすると、サブクラスが実行されてボタンが表示されます。Subクラスのボタンを押すと、jtextareaに「Sampletext」という値が表示されますが、jtextareaにはテキストが表示されません。

サブクラスコード、

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    Main main = new Main();
    main.jTextArea1.setText("Sample text");
}
4

2 に答える 2

4

Mainを新しくするべきではありません。そうすると、別のオブジェクト(おそらく表示されるように設定されていない)が表示され、何も表示されません。あなたがする必要があるのは、次のように、メインオブジェクト(表示されているもの)のローカル変数と、サブのコンストラクターを作成することです。

private Main main;
public Sub(final Main main) {
    this.main = main();
}

次に、メインからサブをインスタンス化すると、次のようになります。

final Sub sub = new Sub(this);

次に、Subでのアクションは次のように言うことができます。

main.jTextArea1.setText("Sample text")

またはさらに良い:

main.getjTextArea1().setText("Sample text");

変数は常にプライベートに保ち、メソッドを使用して変数、ゲッター、セッターなどを操作する必要があります。たとえば、次のように行うことができます。

main.displayText("Sample text");

このように、Subはメインのテキスト領域について何も知る必要がありません。これは良いことです。

于 2012-09-10T20:42:49.720 に答える
0

mainクラス自体ではなくオブジェクトへの参照である限り、それは機能する必要があります!ただし、jTextArea1がパブリックかプライベートかを確認する必要があります。privateを作成する場合、getTextArea()メソッドはtextareaを返し、メソッドを呼び出します(通常はそれがより良い考えです)。sub classから呼び出された場合main class、メインはparent取得しようとしrootPaneます(たとえば、サブはJDialogです)。メインウィンドウを外部(別のクラス)で作成して、どのように動作するかを確認してください。これにより、異なるフレームとダイアログ間の呼び出しで問題が解決しました。

于 2012-09-10T20:42:45.547 に答える