有些问题很傻,但是我们总是犯,
有些问题很罕见,但是不幸的是我们遇到了。
有些问题很平常,但是我们不得不面对。
已解决,在本博另一篇文章里。
其实是我犯了一个低级错误,就是没有primaryStage.show().让stage显示。这个需要注意。很容易漏。
后续遇到问题时会更新本文。。。。
注意第一个索引指的是列,第二个索引指的是行,如gridpane.add(btn,1,3) 指添加btn到第2列,第4行。
读取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处于同一目录 */ 成功。
按照官方说明的
在github上发现一例子,是通过UI组件的stylesheets属性来引用css文件的。
原因为何,确实让人困惑。不过既然有这个属性,我们就通过属性的方式来达到这个目的吧。
参考:http://stackoverflow.com/questions/16374235/resources-and-config-loading-in-maven-project
从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);
scene.lookup("#myId");
.
比如我的Controller类中有两个Button
@FXML private Button myButton1;
@FXML private Button myButton2;
而fxml文件中
//fx:id代表着Controller类中的field
那么FXMLLoader如何区分这两个button呢,通过fx:id与变量名字匹配来进行区分。所以一定要满足这种对应关系
stage.getIcons().add(new Image("/path/to/icon.jpg"));