2017-10-16 6 views
0

私は現在、青と赤の色を切り替えるようにJavaFXコードを設定しています。プログラムが実行されると、テキストが "赤に変わる"ボタンが青いテキストで表示されます。ボタンをクリックすると、赤色のテキストで書かれた "Change to Blue"に変わります。もう一度クリックすると、サイクルが始まります。私がしたいのは同じパターンを適用することですが、4つの色を使用します。たとえば、次のように始めることをお勧めします。4色の間でトグル/変更するテキストのテキストと色を適切に取得するにはどうすればよいですか?

青いテキストで書かれた「赤に変更」。

クリックした後。

「緑色に変更」は赤いテキストで書かれています。

クリックした後。

緑色のテキストで書かれた「Change to Purple」。

クリックした後。

紫色のテキストで書かれた「Change to Blue」。青色のテキストで書かれた

「レッドに変更」、:

クリックした後で、再び上のサイクルを開始します。

などなど

これは、2色の私が持っているコードです:

public class FirstUserInput extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     Button btn = new Button(); 
     btn.setText("Change to Red"); 
     btn.setTextFill(Color.BLUE); 

    btn.setOnAction(e -> { 
     if (btn.getTextFill() == Color.RED) { 
      btn.setText("Change to Red"); 
      btn.setTextFill(Color.BLUE); 
     } else { 
      btn.setText("Change to Blue"); 
      btn.setTextFill(Color.RED); 
     } 
    }); 

誰も私には4色で動作するようにこのコードを変更助けることができますか?

+2

なぜあなたは3つのif文を持っていないのですか? – Confuzing

+0

私はそれを試して、それは動作しません。順序と色がすべて混ざり合ってしまいます。 – Eatel

答えて

1

あなたは、すべてのオプションを保持するための配列または列挙型を使用することができれば-else文で記述し、各アクションイベントでのような正しいものを選択する必要があり、コード減らしたいまあ場合:

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.VBox; 
import javafx.scene.paint.Color; 
import javafx.stage.Stage; 

public class TestApp extends Application { 

    private int index = 0; 

    @Override 
    public void start(Stage primaryStage) { 
     Button btn = new Button(); 
     btn.setText("Change to Red"); 

     String allTexts[] = { "Change to Red", "Change to Blue", "Change to Green", "Change to Pink" }; 
     Color allColors[] = { Color.BLUE, Color.RED, Color.PINK, Color.GREEN }; 

     btn.setOnAction(e -> { 

      index++; 
      if(index >= allTexts.length) { 
       index = 0; 
      } 

      btn.setText(allTexts[index]); 
      btn.setTextFill(allColors[index]); 

     }); 

     VBox box = new VBox(); 
     box.getChildren().add(btn); 

     primaryStage.setScene(new Scene(box)); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

をまあ、上記の作品は、変更が逐次的であるときに私はあなたが探しているものを願っています。

+0

可変インデックスが見つかりません。私は今それを改善しようとしています。もしあなたが助けてくれれば、これを解決する方法を教えてください。 – Eatel

+0

@Eatel私はコード内での推薦として指摘したように、インデックス変数を 'private int index = 0;のようなグローバル変数として定義する必要があります。 – JKostikiadis

+0

正しく動作しません。色がテキストと一致しません。青に変わるとピンクに変わり、青に変わるとピンクに変わります。 – Eatel

関連する問題