如果我有一个 JavaFX 对象的实例(例如 AnchorPane),如何切换其背景/前景色?我在 Google 上进行了快速搜索,但什么也没找到,而且通过探索它的方法,也没有发现像 setColor()
这样明显的东西。
最佳答案
一般建议
任何需要 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 以编程方式控制背景。类(class)。
pane.setBackground(
new BackgroundFill(
Color.CRIMSON, CornerRadii.EMPTY, Insets.EMPTY
)
);
请注意,背景(无论是在 CSS 中定义还是通过背景 API 定义)仅适用于某些类型的节点(例如区域、布局和控件)。
设置形状属性
一个Shape定义一些可以设置来更改形状颜色的属性。常见的形状有圆形、矩形、路径和文本。
stroke :
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);
一般来说,对于很多事情来说,场景图比 Canvas 更适合使用,因为您正在更高的抽象级别上工作。 Canvas GraphicsContext确实具有简单、直接的 API 的优点,尽管它全部定义在单个类中。它对于将代码从其他系统(例如 HTML5 canvas)移植到 JavaFX 也很有用。
关于java - 在 JavaFX 中切换组件的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20283798/