2016-04-11 10 views
0

変更変数別のオブジェクトのコンストラクタでinitiallizedされている変数を変更するときに、私は問題に直面しています

のJFrame:

public class TestWindow { 
    public static void main(String[] args){ 
     String validate = "1234"; 

     Window tester = new Window(); 
     tester.setPort(validate); 
    } 
} 
:テストクラスで

public class Window extends JFrame { 

    private String ip = "default"; 
    private String port = "default"; 
    private String nameClient = "default"; 

    // getters and setters, including setPort ... 

    public void setPort(String port) { 
     this.port = port; 
    } 

    public Window() { 
     JLabel numPort = new JLabel(port); 
     numPort.setBounds(149, 77, 46, 14); 
     add(numPort); 
    } 
} 

ご質問には申し訳ありませんが、ここでJlabelがなぜ変わらないのか理解できません。必要であれば私はあなたがラベルに値を設定している(チャットのようなスイングのアプリをしようとして)

おかげコンストラクタで

+1

メソッドを投稿するWindow.setPort()...ここで何をしているのかを確認する必要があります... –

+3

'setPort'は' port'の値を更新するだけで、 'numPort '。あなたは推測ではない答えが必要な場合は、あなたが質問しているコードを投稿する必要があります。 – azurefrog

+0

私の他の推測では、 'port'の値を更新すると何とか' numPort'が更新されると思いますが、そうでないでしょう(http://stackoverflow.com/questions/40480/is-java-pass-by-参照渡しまたは値渡し)。 – azurefrog

答えて

0

を全体のコードを投稿することができます。この値は、現在のポート値に基づいています。 テストクラスでは、既定のポート値で新しいWindowインスタンスを作成し、ポートの値を変更するだけです(ただし、既に作成されたLabelには影響しません)。

あなたはこのようなコンストラクタにポートパラメータを追加する必要があり、次のいずれか

public Window(String port) { 
     JLabel numPort = new JLabel(port); 
     numPort.setBounds(149, 77, 46, 14); 
     add(numPort); 
} 

たりsetPort()メソッド更新:

public void setPort(String port) { 
    this.port = port; 
    numPort.setText(port); 
} 
+0

ちょっとsettextにsettextを追加したところ、うまくいきました。ありがとう! setportメソッドに –

0

をあなたは、Windowクラス内の値を更新しているではなく、内部JLabel。 Javaの文字列は不変なので、Windowsクラスの変数が文字列の値を変更するのではなく、Stringの新しいインスタンスを実際に指すようになります。

あなたのWindowクラスのコードにこのようなものを使用してみてください:

public class Window extends JFrame { 

    private String ip = "default"; 
    private String port = "default"; 
    private String nameClient = "default"; 
    private JLabel numPort; //converted to a instance variable 

    // getters and setters, including setPort ... 

    public void setPort(String port) { 
     this.port = port; 
     numPort.setText(port); 
    } 

    public Window() { 
     numPort = new JLabel(port); 
     numPort.setBounds(149, 77, 46, 14); 
     add(numPort); 
    } 
} 
+0

が追加されました。ありがとうございました! –

0

私はコンストラクタで実際の作業を行うことをお勧めされていない、認めなければならない:

あなたのウィンドウラベルが変わらない理由は、あなたがメインで次のことをするときです。

Window tester = new Window(); 

あなたのコンストラクタが呼び出されると、あなたのJLabelがすでに「デフォルト」のポート

で初期化された私は、すなわち、これはあなたの入力をより詳細に制御を与える構築のJLabelを渡すコンストラクタに以下の更新を行うことをお勧めします。

public Window(JLabel label) { 
    ...... 
} 

これが役に立ちます。

関連する問題