为了账号安全,请及时绑定邮箱和手机立即绑定

JavaFX 单选按钮不起作用(无法选择)

JavaFX 单选按钮不起作用(无法选择)

米琪卡哇伊 2022-06-23 10:31:02
我想制作一个转换不同基础的项目,但我的单选按钮不起作用。我正在制作三个不同的 VBox 来添加按钮,但只有第三列有效。我对 JavaFX 很陌生,所以如果有人能帮助我,我将不胜感激。谢谢!这是我的代码import javafx.application.Application;import javafx.scene.Scene;import javafx.scene.control.RadioButton;import javafx.scene.control.TextField;import javafx.scene.control.ToggleGroup;import javafx.scene.layout.*;import javafx.scene.text.Text;import javafx.scene.text.TextAlignment;import javafx.stage.Stage;import java.math.BigInteger;public class Main extends Application {private ToggleGroup group;private TextField txtfield;private TextField output;private int base = 10;public static void main(String[] args) {    launch(args);}@Overridepublic void start(Stage primaryStage) {    BorderPane root = new BorderPane();    StackPane title = new StackPane();    Text t = new Text("Gib die Basis und die Zahl ein!");    t.setTextAlignment(TextAlignment.CENTER);    title.getChildren().add(t);    FlowPane center = new FlowPane();    center.setPrefSize(400, 300);    HBox input = new HBox();    VBox base1 = new VBox();    VBox base2 = new VBox();    VBox base3 = new VBox();    input.setPrefSize(400, 100);    base1.setPrefSize(50, 150);    base2.setPrefSize(50, 150);    base3.setPrefSize(50, 150);    group = new ToggleGroup();    for (int i = 2; i < 35; i++) {        RadioButton b = new RadioButton(String.valueOf(i));        if (i == 10) {            b.setSelected(true);        }        b.setToggleGroup(group);        b.setOnMouseClicked(mouseEvent -> {            base = Integer.valueOf(b.getText());            update();        });        if (i % 3 == 2) {            base1.getChildren().add(b);            b.setTranslateX(110);        } else if (i % 3 == 0) {            base2.getChildren().add(b);            b.setTranslateX(120);        } else {            base3.getChildren().add(b);            b.setTranslateX(130);        }    }这是程序应该(并且确实)看起来的样子
查看完整描述

1 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

我相信您对 a 的使用StackPane可能会阻止鼠标事件在您的 RadioButtons 上注册。


虽然我通常不这样做,但下面是一个重新配置的布局,您可以将其用作代码的起点。我已经大大简化了布局,所有 RadioButtons 都按要求运行:


import javafx.application.Application;

import javafx.geometry.Insets;

import javafx.geometry.Pos;

import javafx.scene.Scene;

import javafx.scene.control.Label;

import javafx.scene.control.RadioButton;

import javafx.scene.control.TextField;

import javafx.scene.control.ToggleGroup;

import javafx.scene.layout.GridPane;

import javafx.scene.layout.HBox;

import javafx.scene.layout.VBox;

import javafx.stage.Stage;


public class scratch_1 extends Application {


    public static void main(String[] args) {

        launch(args);

    }


    @Override

    public void start(Stage primaryStage) throws Exception {


        VBox root = new VBox(10);

        root.setAlignment(Pos.CENTER);

        root.setPadding(new Insets(10));


        Label lblTitle = new Label("Gib die Basis und die Zahl ein!");

        root.getChildren().add(lblTitle);


        // The input TextField

        TextField txtInput = new TextField();

        root.getChildren().add(txtInput);


        // HBox to hold our three columns

        HBox hBoxSelections = new HBox(20);

        hBoxSelections.setAlignment(Pos.CENTER);


        // Use a GridPane for our RadioButton grid

        GridPane gridSelections = new GridPane();

        gridSelections.setAlignment(Pos.CENTER);

        gridSelections.setHgap(10);

        gridSelections.setVgap(5);


        // Our ToggleGroup to which all RadioButtons will belong

        ToggleGroup groupSelections = new ToggleGroup();


        // We need 11 rows of 3 RadioButtons, let's use a couple of for loops to populate the GridPane

        int counter = 2;

        for (int i = 0; i < 11; i++) {

            for (int j = 0; j < 3; j++) {

                RadioButton radioButton = new RadioButton("" + counter);

                radioButton.setToggleGroup(groupSelections);


                gridSelections.add(radioButton, j, i);

                counter++;

            }

        }


        // Let's add the GridPane to our root layout

        root.getChildren().add(gridSelections);


        primaryStage.setScene(new Scene(root, 400, 400));

        primaryStage.show();

    }

}

结果:

//img1.sycdn.imooc.com//62b3d0990001410206150657.jpg

请注意,我从您之前的代码发布中工作,因此上述示例不包括您的update()方法(或任何逻辑,就此而言)。



查看完整回答
反对 回复 2022-06-23
  • 1 回答
  • 0 关注
  • 189 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信