javafx遭遇的問題記錄集合,不斷更新。。。。。。。

有些問題很傻,但是我們總是犯,

有些問題很罕見,但是不幸的是我們遇到了。

有些問題很平常,但是我們不得不面對。


問題集合:

1.maven集成問題,

已解決,在本博另一篇文章裏。

2.maven jfx:run無反應問題,

其實是我犯了一個低級錯誤,就是沒有primaryStage.show().讓stage顯示。這個需要注意。很容易漏。

後續遇到問題時會更新本文。。。。

3. GridPane中add(node,columnindex,rowindex),

注意第一個索引指的是列,第二個索引指的是行,如gridpane.add(btn,1,3) 指添加btn到第2列,第4行。

4.maven下讀取資源文件的問題:

讀取css文件

maven默認將css文件放在src/main/resources/styles/xby.css被打包成jar之後目錄結構變爲/styles/xby.css

所以我們讀取資源文件時應該採用:MainApp.class.getResource("/styles/MainApp.css").toExternalForm();得到string形式的url

css讀取jpg文件:css文件可不是java文件可以使用java的類加載器類讀取資源文件。那麼這該怎麼辦呢?

本人嘗試如下:

將jpg文件放在src/main/resources/images目錄下面:

-fx-background-image: url("../images/background.jpg");   成功。

-fx-background-image: url("/images/background.jpg");   失敗

jpg與css處於同一目錄 下:

  -fx-background-image: url("background.jpg"); /*jpg與css處於同一目錄 */ 成功。


5.fxml中讀取css文件的路徑問題:

按照官方說明的<stylesheets><URL value="@xby.css" /></stylesheets>本人嘗試多次並沒有成功,(CSS文件與FXML文件在同一目錄下。)

在github上發現一例子,是通過UI組件的stylesheets屬性來引用css文件的。

<GridPane stylesheets="@xby.css">成功。

原因爲何,確實讓人困惑。不過既然有這個屬性,我們就通過屬性的方式來達到這個目的吧。


參考:http://stackoverflow.com/questions/16374235/resources-and-config-loading-in-maven-project


6.javafx代碼中訪問從FXML文件中特定的Control UI組件

從javafx代碼中訪問fxml中的特定UI組件:通過Parent的lookup方法。

lookup()可以通過css選擇器的方式來進行UI組件元素的訪問。

Parent root = FXMLLoader.load(me.getClass().getResource("Form.fxml"));
Label lblData = (Label) root.lookup("#lblData");
if (lblData!=null) lblData.setText(strData); 

For example, if a Node is given the id of "myId", then the lookup method can be used to find this node as follows: scene.lookup("#myId");.
lookup還支持選擇器如:.button, .password-field這樣的類/元素選擇器<Button>,<PasswordField>,(但是目前類選擇器不支持text,hbox等)
推薦現階段僅使用id選擇器。

7.javafx FXML Controller中訪問同一類型的UI組件的不同實例:

比如我的Controller類中有兩個Button

@FXML private Button myButton1;

@FXML private Button myButton2;

而fxml文件中

<Button fx:id="myButton1"/> //fx:id代表着Controller類中的field

<Button fx:id="myButton2"/>

那麼FXMLLoader如何區分這兩個button呢,通過fx:id與變量名字匹配來進行區分。所以一定要滿足這種對應關係

8.javafx設置應用或窗口圖標

stage.getIcons().add(new Image("/path/to/icon.jpg"));

9.退出程序:

 Platform.exit();
  System.exit(0);

10.添加上下文菜單:

 添加上下文菜單:
 //adding context menu
        final ContextMenu cm = new ContextMenu();
        MenuItem cmItem1 = new MenuItem("Print");
        cm.getItems().add(cmItem1);
        toolBar.addEventHandler(MouseEvent.MOUSE_CLICKED, (MouseEvent e) -> {
            if (e.getButton() == MouseButton.SECONDARY) {
                cm.show(toolBar, e.getScreenX(), e.getScreenY());
            }
        });
11.Dialog對話框不存在問題
ControlsFX開源庫中含有對話框組件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章