当您是像我这样来自Swing的UI开发人员时,您很有可能仍在代码中直接设置图像/图标。 最可能是这样的:
import javafx.scene.control.Label;
import javafx.scene.image.ImageView;public class MyLabel extends Label {public MyLabel() {setGraphic(new ImageView(MyLabel.class.getResource("image.gif").toExternalForm()));}
}
在此示例中,通过Class.getResource()查找图像文件,将URL传递到ImageView节点的构造函数,并且将该节点设置为标签上的“ graphic”属性。
这种方法效果很好,但是使用JavaFX则有更优雅的方法。 您可以将图像定义放入CSS文件中,以便您和/或其他人轻松替换它(营销部门已决定再次更改公司标识)。
可以通过以下方式获得与上述相同的结果:
import javafx.scene.control.Label;public class CSSLabel extends Label {public CSSLabel() {getStyleClass().add("folder-icon");}
}
现在您显然也需要一个CSS文件:
.folder-icon {-fx-graphic: url("image.gif");
}
并且在您的应用程序中,您需要将样式表添加到场景图。 在这里,我们将其添加到场景中。
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.stage.Stage;public class MyApplication extends Application {public void start(Stage primaryStage) throws Exception {CSSLabel label = new CSSLabel();label.setText("Folder");label.setAlignment(Pos.CENTER);Scene scene = new Scene(label);scene.getStylesheets().add(MyApplication.class.getResource("test.css").toExternalForm());primaryStage.setScene(scene);primaryStage.setTitle("Image Example");primaryStage.setWidth(250);primaryStage.setHeight(100);primaryStage.show();}public static void main(String[] args) {launch(args);}
}
使用这种方法,您可以将控件及其外观完全分开,并且还可以轻松进行自定义。
翻译自: https://www.javacodegeeks.com/2014/07/javafx-tip-12-define-icons-in-css.html