2015-07-19 156 views
0

我已經問了類似的問題here。答案是正確的,但似乎它不適用於我的情況。看看我的代碼:如何按下鍵盤上的按鍵時更改按鈕的外觀。 JavaFx

import javafx.application.Application; 
import javafx.event.EventHandler; 
import javafx.geometry.Insets; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.input.KeyEvent; 
import javafx.scene.layout.FlowPane; 
import javafx.stage.Stage; 

public class Main extends Application { 

@Override 
public void start(Stage primaryStage) throws Exception{ 
    FlowPane root = new FlowPane(); 
    root.setPadding(new Insets(40, 40, 40, 40)); 
    Button btn = new Button("NEW BUTTON"); 
    btn.setId("button"); 

    root.setOnKeyPressed(new EventHandler<KeyEvent>() { 
     @Override 
     public void handle(KeyEvent event) { 
      btn.arm(); 
     } 
    }); 

    root.setOnKeyReleased(new EventHandler<KeyEvent>() { 
     @Override 
     public void handle(KeyEvent event) { 
      btn.disarm(); 
     } 
    }); 

    root.getChildren().addAll(btn); 
    primaryStage.setScene(new Scene(root, 310, 200)); 
    primaryStage.getScene().getStylesheets().add("style.css"); 
    primaryStage.show(); 
} 


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

然後我指定的樣式表:

#button { 
-fx-background-color: #403e40; 
-fx-border-width: 0; 
-fx-font-size: 30px; 
-fx-text-fill: #b3b1b3; 
-fx-background-radius: 0; 
} 

#button:hover { 
-fx-background-color: #595759; 
} 

#button:pressed { 
-fx-background-color: #ffffff; 
-fx-text-fill: #403e40; 
} 

而在最後,這是行不通的。我非常沮喪。它工作得很好,如果.css文件沒有鏈接,並且無法正常工作。那麼,如果按下自定義視圖的按鍵,是否可以改變按鈕的外觀?

回答

0

您可以創建自己的武裝和解除武裝。最初,您設置了撤防風格,並根據您的關鍵狀態,首先刪除所有相關風格並設置武裝或非武裝樣式。就像這樣:

import javafx.application.Application; 
import javafx.event.EventHandler; 
import javafx.geometry.Insets; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.input.KeyEvent; 
import javafx.scene.layout.FlowPane; 
import javafx.stage.Stage; 

public class Main extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     FlowPane root = new FlowPane(); 
     root.setPadding(new Insets(40, 40, 40, 40)); 
     Button btn = new Button("NEW BUTTON"); 
     btn.setId("button"); 
     btn.getStyleClass().add("disarmed"); 

     root.setOnKeyPressed(new EventHandler<KeyEvent>() { 
      @Override 
      public void handle(KeyEvent event) { 

       // remove existing styles 
       btn.getStyleClass().remove("armed"); 
       btn.getStyleClass().remove("disarmed"); 

       // add new style 
       btn.getStyleClass().add("armed"); 

       btn.arm(); 
      } 
     }); 

     root.setOnKeyReleased(new EventHandler<KeyEvent>() { 
      @Override 
      public void handle(KeyEvent event) { 

       // remove existing styles 
       btn.getStyleClass().remove("armed"); 
       btn.getStyleClass().remove("disarmed"); 

       // add new style 
       btn.getStyleClass().add("disarmed"); 

       btn.disarm(); 

      } 
     }); 

     root.getChildren().addAll(btn); 
     primaryStage.setScene(new Scene(root, 310, 200)); 
     primaryStage.getScene().getStylesheets().add(getClass().getResource("style.css").toExternalForm()); 
     primaryStage.show(); 
    } 

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

而CSS:

#button { 
-fx-border-width: 0; 
-fx-font-size: 30px; 
-fx-text-fill: #b3b1b3; 
-fx-background-radius: 0; 
} 

#button:hover { 
-fx-background-color: #595759; 
} 

#button:pressed { 
-fx-background-color: #ffffff; 
-fx-text-fill: #403e40; 
} 

.armed { 
-fx-background-color: #ff0000; 
} 
.disarmed { 
-fx-background-color: #403e40; 
} 

請注意,如果您設置的ID選擇器(#)的背景顏色,將獲得更高的優先級,你不能覆蓋它。

相關問題