2014-11-03 48 views
0

我遇到問題,因爲某些惡意原因我無法使用第二個css文件。我使用IntelliJ IDEA 14(版本139.222)終極版。 我使用JavaFX 2.0它內置在IntelliJ IDEA 139.222內部版本 Board.css不起作用。 LoginForm.css工作正常。 另外我已經將; * .css資源模式添加到編譯器部分。JavaFX - css在我的項目中不起作用

btn是我點擊是在登錄表按鈕。 代替GameApp類(它是從應用類繼承的類), 我用的getClass()方法,甚至一些其他類。沒有結果。

我試圖在Board.css使用的CSS是.button:懸停{-fx背景色:白色;} }

下面的代碼:

btn.setOnAction(new EventHandler<ActionEvent>() { 
    @Override 
    public void handle(ActionEvent event) { 
     Parent root = null; 
     try { 
      root = (Pane) FXMLLoader.load(GameApp.class.getResource("/sample/buttonGrid.fxml")); 
      root.getStylesheets().add(GameApp.class.getResource("/sample/Board.css").toExternalForm()); 
      currentStage.setScene(new Scene(root)); 
      currentStage.setResizable(false); 
      currentStage.show(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
}); 

@Override 
public void start(Stage primaryStage) throws InterruptedException, IOException { 
    this.currentStage = primaryStage; 
    primaryStage.setTitle("Hello World"); 
    initPane(); 
    Scene scene = new Scene(grid, 698, 364); 
    scene.getStylesheets().add(GameApp.class.getResource("LoginForm.css").toExternalForm()); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 

} 

這一個沒有工作過:

 try { 
      Pane pane = (Pane) FXMLLoader.load(GameApp.class.getResource("/sample/buttonGrid.fxml")); 
      pane.getStylesheets().add("/sample/Board.css"); 
      currentStage.setScene(new Scene(pane)); 
      currentStage.setResizable(false); 
      currentStage.show(); 

     } 

Board.css是:

.button:hover { 
    -fx-background-color: white; 
} 
+0

哪個版本的JavaFX你使用?在早期版本中,將樣式表應用於'Parent'有一些問題。假設您沒有看到任何錯誤消息,請嘗試將樣式表添加到「Scene」而不是根節點。 – 2014-11-03 13:58:20

+0

我不知道。 JavaFX內置於Intellij IDEA中。我正在處理這一個星期:)。讓我檢查一下。哦,我在Windows 8下運行的JavaFX Scene Builder 2.0中創建了一些FXML文件。 – 2014-11-03 14:18:45

+0

如何做到這一點? – 2014-11-03 14:21:49

回答

0

早期版本的JavaFX在向Parent節點添加樣式表時存在一些問題,而不是直接將其添加到Scene。按鈕的動作處理程序中的代碼將樣式表添加到節點。

我會建議您確保您使用的是JDK和JavaFX的最新版本;最好是Java 8(它與JavaFX 8捆綁在一起)。如果您被迫使用Java 7,請確保您擁有與JavaFX 2.2捆綁在一起的最新版本。只需更新您的JDK版本即可解決問題。

也可以嘗試直接添加樣式表到現場,而不是根節點:

btn.setOnAction(new EventHandler<ActionEvent>() { 
    @Override 
    public void handle(ActionEvent event) { 
     Parent root = null; 
     try { 
      root = (Pane) FXMLLoader.load(GameApp.class.getResource("/sample/buttonGrid.fxml")); 
      Scene scene = new Scene(root); 
      scene.getStylesheets().add(GameApp.class.getResource("/sample/Board.css").toExternalForm()); 
      currentStage.setScene(scene); 
      currentStage.setResizable(false); 
      currentStage.show(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
}); 
+0

現在我將樣式表直接添加到Scene對象中。那是你的意思?嘗試{Pane pane =(Pane)FXMLLoader.load(GameApp.class.getResource(「/ sample/buttonGrid.fxml」)); 場景場景=新場景(窗格); scene.getStylesheets()。add(「/ sample/Board.css」); currentStage.setScene(scene); currentStage.setResizable(false); currentStage.show(); } – 2014-11-03 15:45:54

+0

我使用JDK 1.8.0_25和JavaFX 2.0。 – 2014-11-03 15:49:38

+0

這似乎不太可能,除非你有一個非常奇怪的設置。 Java 8(JDK 1.8.0)已經包含了JavaFX 8。你能做'System.out.println(System.getProperty(「javafx.version」));'來確認。如果您真的使用JavaFX 2.0,則需要修復您的項目設置。 – 2014-11-03 16:17:58