3

当我单击 JavaFX 按钮时,如何删除小的展开效果?还有我怎样才能让它像一个菜单按钮一样工作(当我按下它以保持聚焦状态,直到我按下另一个“菜单”按钮)。有没有办法将节点分组到同一个焦点?

4

2 回答 2

5

一个价格的三个问题;-)

当我单击 JavaFX 按钮时,如何删除小的展开效果?

当你点击按钮时它有焦点,当它有焦点时,它被对焦环包围,这使得它略大。这个效果是通过css触发的。

默认 css 位于 JavaFX 运行时安装的 jfxrt.jar 中的 caspian.css 中。相关摘录在这里:

.button {
    -fx-skin: "com.sun.javafx.scene.control.skin.ButtonSkin";
    -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color;
    -fx-background-insets: 0 0 -1 0, 0, 1, 2;
    -fx-background-radius: 5, 5, 4, 3;

... }

.button:focused {
    -fx-color: -fx-focused-base;
    -fx-background-color: -fx-focus-color, -fx-outer-border, -fx-inner-border, -fx-body-color;
    -fx-background-insets: -1.4, 0, 1, 2;
    -fx-background-radius:  6.4, 5, 4, 3;
}

要消除轻微的扩展效果,请创建自己的样式表。在您的样式表中将其分配给您的场景,并将焦点和非焦点按钮的背景插图和半径设置为相同的值。这是关于 JavaFX CSS 的教程和有用的 JavaFX CSS参考指南

我怎样才能让它像菜单按钮一样工作(当我按下它以保持聚焦状态,直到我按下另一个“菜单”按钮)。

我不太明白这个问题 - 这是按钮的默认行为。也许您正在混合焦点和手臂状态并且实际上想要一个ToggleButton

有没有办法将节点分组到同一个焦点?

暂时没有内置到平台中。您可以为布局窗格编写自己的 FocusModel 类,该类会记住窗格中具有焦点的最后一个控件,并在窗格重新获得焦点或类似的东西时再次为其重新分配焦点。不过,这将是自定义代码。您需要使用的概念是节点的焦点属性、节点 requestFocus api(有时会通过在 Platform.runLater 中执行以确保您覆盖默认焦点处理而延迟)以及(我认为)默认焦点顺序取决于根据父级中的子级顺序。

于 2012-06-13T06:52:22.757 回答
1

如果您不喜欢默认按钮,请为自己喜欢的按钮设置样式。否则用代码或图像解释小扩展效果。
使用 Menu 和 MenuItems来制作菜单。
或者使用Toggle Button对按钮进行分组并将它们表现得像一个菜单。
通过说“保持专注状态”,我假设您的意思是“选择/切换状态”而不是专注。导致按钮在单击后仍处于焦点状态。

于 2012-06-13T06:50:39.240 回答