如果我有一个JavaFX对象的实例,比如一个AnchorPane,我该如何切换它的背景/前景色?我做了一个快速的谷歌搜索,它没有任何结果,也通过探索它的方法没有明显的像setColor()
。
答案 0 :(得分:4)
一般建议
任何以Paint为参数的内容都可以设置颜色,因为Color是从Paint派生的。
设置组件的方法有多种,一般来说,使用css通常是首选,因为它允许您以声明方式设置场景图形,与程序逻辑分开。这样,当您的应用程序切换到维护模式时,可以更轻松地修改和更新样式。
使用CSS
简单的css样式应用程序:
anchorPane.setStyle("-fx-background-color: cornsilk;");
就css应用而言,建议使用样式表而不是上面的setStyle调用。您可以在以下答案中查看JavaFX中不同样式应用程序的说明:In JavaFX, should I use CSS or setter methods to change properties on my UI Nodes?。
应用样式表的示例:
scene.getStylesheets().add(getClass().getResource("pane.css").toExternalForm());
myAnchorPane.getStyleClass().add("colored-pane");
一个样式表,用于设置所有AnchorPanes的背景颜色:
/** `pane.css` in the same directory as your application class **/
.colored-pane { -fx-background-color: cornsilk; }
使用Java 8后台API
Java 8引入了一个新的API,通过Background类以编程方式控制背景。
pane.setBackground(
new BackgroundFill(
Color.CRIMSON, CornerRadii.EMPTY, Insets.EMPTY
)
);
注意,背景(无论是在css中定义还是通过后台API定义)仅适用于某些类型的节点(例如区域,布局和控件)。
设置形状属性
Shape定义了一些可以设置的属性来更改形状颜色。常见的形状是圆形,矩形,路径和文本。
a stroke that is drawn around the outline of a Shape
using the settings of the specified Paint.
fill:
fill the interior of an Shape using the settings of the Paint context.
填充和描边样本:
// draws a green square with a thick blue border.
Rectangle square = new Rectangle(30, 30, 50, 50);
square.setFill(Color.GREEN);
square.setStroke(Color.BLUE);
square.setStrokeWidth(6);
Canvas GraphicsContext
许多JavaFX基于场景图中的声明性定义,fxml和css,而不是像setColor()
这样的显式命令式命令。我的意思是你发出命令的顺序并没有太大的区别。如果您想使用更传统的绘图方法,通过将系统置于一个模式,其中所有后续命令作用于定义当前绘图属性(如填充和描边样式)的上下文,请使用Canvas。
// paint two blue rectangles on a canvas.
final Canvas canvas = new Canvas(250,250);
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.setFill(Color.BLUE);
gc.fillRect(75,75,100,100);
gc.fillRect(25,25,30,30);
一般来说,对于很多东西,当你在更高的抽象层次上工作时,SceneGraph比Canvas更适合工作。画布GraphicsContext确实具有简单,直接的API的优点,尽管它在一个类中定义。它还可以将代码从其他系统(如HTML5 canvas)移植到JavaFX。