【问题标题】:How to space radioButtons如何分隔单选按钮
【发布时间】:2015-03-10 01:28:03
【问题描述】:

我对 Java 还很陌生,并且正在开发一个 QuizFrame 项目,以此来更好地使用 FX。代码仍在进行中,但我的主要问题是:如何分隔单选按钮?

当我在 Swing 中进行操作时,按钮似乎自动间隔开,但在这里它只是一个单选按钮,所有选项都堆叠在一起。

代码如下:

public class QuizFrame2 extends Application {

    RadioButton[] optionButtons;
    TextArea questionArea;
    Button submitButton;
    Question[] questions;
    int currQuestion;
    Pane questionPanel;
    String[] choices;
    TextArea resultArea;
    
    final int NUM_OPTIONS = 4;
    
    @Override
    public void start(Stage primaryStage) throws Exception {
        
        GridPane grid = new GridPane();
        grid.setPadding(new Insets(10, 10, 10, 10));
        grid.setVgap(5);
        grid.setHgap(5);
        
        questions = new Question[2];
        questions[0] = new Question();
        questions[1] = new Question("What is 1+1?", 
           new String[]{"1", "2", "3", "4"}, "2");
        
        currQuestion = 0;
        
        questionArea = new TextArea();
        questionArea.setText(questions[currQuestion].getQuestion());
        submitButton = new Button();
        submitButton.setText("Submit");
        
        questionArea.setPrefSize(500, 50);
        
        ToggleGroup bG = new ToggleGroup();
        
        RadioButton[] optionsButton = new RadioButton[NUM_OPTIONS];
        questionPanel = new Pane();
        
        for(int i = 0; i < optionsButton.length; i++)
        {

         optionsButton[i] = new RadioButton(questions[currQuestion].getOption(i));
         optionsButton[i].setToggleGroup(bG);
         questionPanel.getChildren().add(optionsButton[i]);
        }
        
        submitButton.setOnAction(new EventHandler<ActionEvent>()
                {

                    @Override
                    public void handle(ActionEvent event) {
                        // TODO Auto-generated method stub
                        
                    }
                });

        GridPane.setConstraints(submitButton, 0, 80);
        GridPane.setConstraints(questionArea, 0, 0);
        GridPane.setConstraints(questionPanel, 0, 3);
        
        grid.getChildren().add(questionPanel);
        grid.getChildren().add(questionArea);
        grid.getChildren().add(submitButton);
        
        Scene scene = new Scene(grid, 500, 500);

        primaryStage.setTitle("TextArea Input");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    
    public static void main(String[] args) 
    {
        launch(args);
    }
}

【问题讨论】:

  • 如果不知道按钮的布局方式,几乎不可能回答您的问题。与 Swing 不同,在 Swing 中,您有一个附加了布局管理器的通用面板,JavaFX 没有单独的布局管理器类:您只需根据您想要的布局使用一个或多个适当的 Pane 子类。请参阅layout tutorial 了解内置布局窗格的概要。
  • 我明白了。布局也是一个简单的布局,顶部是 textArea,中间是选项(又名单选按钮),底部是提交按钮。
  • 是的,但是您需要将单选按钮放在特定的布局窗格中。现在,您只需将它们放在通用的 Pane (questionPanel) 中,它没有布局。
  • 我该怎么做呢?我通读了布局教程,似乎他/她为每个 hbox/vbox 做了一个类?
  • 如果我理解正确的话,你的意思是应该将 questionPanel 指定为 GridPane 或 FlowPane 中的哪种窗格?

标签: java eclipse javafx


【解决方案1】:

您将RadioButtons 放在通用Pane 中,它没有布局。您需要使用特定的 Pane 子类来执行您需要的布局。

例如,您可以使用VBox

questionPanel = new VBox();

for(int i = 0; i < optionsButton.length; i++)
{

 optionsButton[i] = new RadioButton(questions[currQuestion].getOption(i));
 optionsButton[i].setToggleGroup(bG);
 questionPanel.getChildren().add(optionsButton[i]);


}

【讨论】:

  • 非常感谢,所以 questionPanel 本身必须是一个特定的窗格?因为我试图做的是将其保留为 Pane 或 GridPane 并尝试将其插入到 VBox 中。如,vbox.getChildren().add(questionPanel) 希望其基于行的性质将它们分开。
猜你喜欢
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
  • 2016-02-05
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多