如何使RadioButton看起来像JavaFX中的常规按钮

如何使RadioButton看起来像JavaFX中的常规按钮,java,javafx,javafx-2,javafx-8,Java,Javafx,Javafx 2,Javafx 8,我正在实现一个类似工具箱的窗格,所以用户一次只能选择一个工具,我从Button切换到RadioButton,查看其行为 但是我发现,RadioButton使用它自己的带有点的皮肤,但是我仍然希望它像普通的按钮一样显示。我是JavaFX和FXML的初学者,所以大家都知道我该如何实现这一点吗?首先创建一个单选按钮,删除单选按钮样式,然后添加切换按钮样式,如 RadioButton radioButton=new RadioButton("Radio"); radioButton.getStyleCl

我正在实现一个类似工具箱的窗格,所以用户一次只能选择一个工具,我从
Button
切换到
RadioButton
,查看其行为


但是我发现,
RadioButton
使用它自己的带有点的皮肤,但是我仍然希望它像普通的
按钮一样显示。我是JavaFX和FXML的初学者,所以大家都知道我该如何实现这一点吗?

首先创建一个单选按钮,删除
单选按钮
样式,然后添加
切换按钮
样式,如

RadioButton radioButton=new RadioButton("Radio");
radioButton.getStyleClass().remove("radio-button");
radioButton.getStyleClass().add("toggle-button");

希望能解决您的问题

您可以使用
ToggleButton
ToggleGroup
,但您必须创建
ToggleGroup
的扩展以保持选中的一个。这是一个。

最后我换了一种方式。您可以扩展
切换按钮
,使其行为类似于
单选按钮
。这并没有消耗鼠标释放的奇怪点击效果

public class RadioToggleButton extends ToggleButton {

    // As in RadioButton.
    /**
     * Toggles the state of the radio button if and only if the RadioButton
     * has not already selected or is not part of a {@link ToggleGroup}.
     */
    @Override
    public void fire() {
        // we don't toggle from selected to not selected if part of a group
        if (getToggleGroup() == null || !isSelected()) {
            super.fire();
        }
    }
}
然后在FXML中:

<fx:define>
    <ToggleGroup fx:id="toolToggleGroup" />
</fx:define>
<RadioToggleButton toggleGroup="$toolToggleGroup" />
<RadioToggleButton toggleGroup="$toolToggleGroup" />


完成了。

这是您可以用来去除圆点的样式

.radio-button > .radio {
  -fx-background-color: transparent;
  -fx-background-insets: 0;
  -fx-background-radius: 0px;
  -fx-padding: 0.0em; /* 4 8 4 8 */
}
.radio-button:selected > .radio > .dot {
  -fx-background-color: transparent;
}

在这里记录;万一有人觉得有用

使用@James\u D,但是我需要的行为是
单选按钮
,即单击所选按钮不会取消其选择,等等。我没有意识到行为上的差异。(还有其他的吗?)您可以参考以覆盖单选按钮的外观,这是一项很费事但非常健壮的工作,或者只注册足够的事件过滤器以按照您想要的方式修复行为。尝试添加
buttonStyleClass
请参见:我尝试添加“切换按钮”作为样式,但是我无法摆脱
单选按钮的圆点
@dreamingcode查看代码编辑,它现在工作得非常好。谢谢,它为我工作了。但我仍然想在FXML中处理它。简单地使用styleClass=“toggle button”不会删除“单选按钮”类,您有什么解决方案吗?您的解决方案直接回答了这个问题,因此我现在为未来的访问者接受它。但我认为此场景中的按钮在语义上是
RadioButton
s,而不是
ToggleButton
s。您知道如何将
RadioButton
样式设置为
ToggleButton
?以链接中所述方式实现的
ToggleGroup
类似于
RadioButton
,因为它们一次只允许选择一个,并且选择是持久的。因此,如果单击选定的
切换按钮
,它将不会取消选择。如果在组中单击不同的
切换按钮
,新按钮将被选中,旧按钮将被取消选中。这不是你想要的行为吗?我想要的是
RadioButton
的语义正确性,但现在我承认
RadioButton
在语义上也有它的外观。我现在使用的是另一个自己发布的解决方案,而不是您提供的链接,但感谢您的帮助。