2017-10-16 78 views
0

我目前已將我的JavaFX代碼設置爲在藍色和紅色之間切換。程序運行時,帶有文本「更改爲紅色」的按鈕以藍色文本顯示。如果我點擊按鈕,它會變成紅色文字寫成的「更改爲藍色」。如果我再次點擊它,則循環開始。我想要做的是應用相同的模式,但使用四種顏色。例如,我希望它開始於:如何恰當地獲取文本的文本和顏色以在4種顏色之間切換/更改?

「更改爲紅色」,用藍色文本編寫。點擊後,然後

「改變爲綠色」,用紅色文字寫成。點擊後,然後

「換成紫色」,用綠色文字寫成。點擊後,然後

「換成藍色」,用紫色文字寫成。

然後點擊後再次啓動週期結束:

「更改爲紅色」,寫在藍色文本。

等等,等等

這是我的代碼有兩種顏色:

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); 
     } 
    }); 

誰能幫我改這個代碼用四種顏色來工作?

+2

爲什麼你只是不擴展你有三個if語句? – Confuzing

+0

我試過了,它不起作用。順序和顏色混合起來。 – Eatel

回答

1

那麼,如果你想降低您有if-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