JavaFX RadioButton setSelected()不起作用

时间:2018-05-22 19:52:22

标签: javafx-8

我正在创建一个JavaFX FXML应用程序,并且在切换组中默认情况下无法使用setSelected()方法设置两个单选按钮之一。切换组正常运行,因此可以正确设置单选按钮变量。但是,radio1未按预期选择。

以下是我申请的相关部分。

系统信息

Product Version: NetBeans IDE 8.1 (Build 201510222201)
Updates: NetBeans IDE is updated to version NetBeans 8.1 Patch 1
Java: 1.8.0_171; Java HotSpot(TM) 64-Bit Server VM 25.171-b11
Runtime: Java(TM) SE Runtime Environment 1.8.0_171-b11
System: Mac OS X version 10.13.4 running on x86_64; UTF-8; en_US (nb)

FXML

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.RadioButton?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.ToggleGroup?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.Font?>

<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="400.0"
    xmlns="http://javafx.com/javafx/8.0.141"
    xmlns:fx="http://javafx.com/fxml/1"
    fx:controller="inventory.view.AddPartController">
   <fx:define>
       <ToggleGroup fx:id="toggleGroup" />
   </fx:define>
   <children>
      <RadioButton fx:id="radio1" mnemonicParsing="false"
          onAction="#handleRadio1" prefHeight="30.0" prefWidth="100.0"
          text="radio1" toggleGroup="$toggleGroup"
          AnchorPane.rightAnchor="125.0" AnchorPane.topAnchor="25.0" />
      <RadioButton fx:id="radio2" mnemonicParsing="false"
          onAction="#handleRadio2" prefHeight="30.0" prefWidth="100.0"
          text="radio2" toggleGroup="$toggleGroup"
          AnchorPane.rightAnchor="25.0" AnchorPane.topAnchor="25.0" />
   </children>
</AnchorPane>

控制器

package inventory.view;

import inventory.InventorySystem;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.control.TextField;
import javafx.scene.control.ToggleGroup;

public class AddPartController {

    @FXML
    private ToggleGroup toggleGroup;

    @FXML
    private RadioButton radio1;

    @FXML
    private RadioButton radio2;

    @FXML
    private void initialize() {
        toggleGroup = new ToggleGroup();

        radio1 = new RadioButton();
        radio1.setToggleGroup(toggleGroup);
        radio1.setSelected(true);

        radio2 = new RadioButton();
        radio2.setToggleGroup(toggleGroup);
    }
}

我哪里错了?

2 个答案:

答案 0 :(得分:0)

您正在重新初始化单选按钮。 FXML将注入引用,然后覆盖它。您还可以在FXML中定义切换组 - 因此您也不需要。

将您的代码更改为:

 @FXML
    private void initialize() {
        radio1.setSelected(true);
    }

答案 1 :(得分:0)

不要再次初始化按钮。这些行就足够了。

@FXML
private void initialize() {
    radio1.setToggleGroup(toggleGroup);
    radio1.setSelected(true);
    radio2.setToggleGroup(toggleGroup);
}