

テキストフィールドを2つ準備して、コピーボタンを押したときに、テキストフィールドの内容をコピーするプログラムを作っています。実現すべきことは以下の３つ。

①テキストフィールド１のみに文字が入力されているときに、コピーボタンを押すと、テキストフィールド１の内容をテキストフィールド２にコピーする。テキストフィールド１の内容は表示したままにする。  
②テキストフィールド２のみに文字が入力されているときに、コピーボタンを押すと、テキストフィールド２の内容をテキストフィールド１にコピーする。テキストフィールド２の内容は表示したままにする。  
③テキストフィールド１とテキストフィールド2に文字が入力されているときは、テキストフィールド１とテキストフィールド2を入れ替える。

②、③についてはできたのですが、なぜか①のときのみテキストフィールド１の内容が消えてしまい、テキストフィールド２にはテキストフィールド１の内容が表示されます。①と②は同じ要領なので、②ができて、①ができない理由がわかりません。コードは以下のとおりです。①実現のためにどのようにすればよいかご助言いただけないでしょうか。

[code]

    import java.applet.Applet;
    import java.awt.Button;
    import java.awt.FlowLayout;
    import java.awt.TextField;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    public class COPY extends Applet implements ActionListener {          
        //フィールド
    
        private TextField Text1 = new TextField("", 20); //ボタン，テキストフィールド
        private Button btn1 = new Button("COPY");                     
        private TextField Text2 = new TextField("", 20);    
    
        public COPY(){
    
            //コンポーネントの登録 (Appletと共通)                
            //レイアウトマネージャを設定     
            setLayout( new FlowLayout( FlowLayout.CENTER) );  //    
    
            //コンポーネントの登録  
            add(Text1);
            add(btn1); 
            add(Text2);
    
            //イベントリスナーの登録                
            btn1.addActionListener(this);               
            Text1.addActionListener(this);
            Text2.addActionListener(this);
        }
        //actionPerformedメソッド        
        public void actionPerformed(ActionEvent arg0) {      
            //btn1が押されたら、テキストフィールドの状況に応じて、コピーのパターンを選ぶ
            if(arg0.getSource()== btn1){           
                String str1 = Text1.getText();
                String str2 = Text2.getText();
                if("".equals(str2)){
                    Text2.setText(str1);
                    Text1.setText(str1);
                }
                if("".equals(str1)){
                    Text1.setText(str2);
                    Text2.setText(str2);
                }
                else{
                    Text2.setText(str1);
                    Text1.setText(str2);
                }
            }                   
        }
    }
    
[/code]


CC BY-SA 4.0
2020-10-03T08:57:49.467
70896
2020-10-12T20:44:42.527
2020-10-03T11:31:49.487
3060
34781
question
java
テキストフィールドの内容のコピー


端的に回答すると、2つのif文の前にelse句が抜けているのが原因と思います。ですので、  
次のようにすると期待通りに動作すると思います。

[code]

    if("".equals(str2)){
        Text2.setText(str1);
        Text1.setText(str1);
    }
    else if("".equals(str1)){
        Text1.setText(str2);
        Text2.setText(str2);
    }
    else{
        Text2.setText(str1);
        Text1.setText(str2);
    }
    
[/code]

* * *

**補足**  
質問文にあった条件文では、1つ目のif文(`if("".equals(str2)){`)の結果に関わらず、2つ目のif文  
(`if("".equals(str1)){`)が実行されます。  
(①の状況の場合、条件式は`false`になるので、`else`節の処理が実行され、Text1とText2の内容が入れ替わっています)  
1つ目のif文の条件式が`true`の場合、次のif文は処理したくないので、`else`句を加える必要があります。(こうすることで、1つ目のif文の条件式が`false`の場合のみ2つ目のif文が実行される)


CC BY-SA 4.0
2020-10-03T09:28:46.003
70897
2020-10-03T11:32:38.177
2020-10-03T11:32:38.177
3060
20098
70896
answer