【发布时间】: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 中的哪种窗格?