如何使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
在语义上也有它的外观。我现在使用的是另一个自己发布的解决方案,而不是您提供的链接,但感谢您的帮助。