我正在嘗試使用 JavaFX 構建一個 GUI 堆疊。我應該問用戶他想要堆疊的多少元素。然后,TextField 的數量應根據用戶輸入的大小出現在右側螢屏上。我一直在嘗試一整天,但仍然沒有任何效果。
到目前為止,這是我一直在嘗試做的事情。解決 TextFields 陣列問題后,我應該完成我的程式。
`
public class StackGUI extends Application{
private Button push, pop, peek, empty, create, build ;
private TextField[] data ;
private TextField size, numberText ;
private Label sizeLabel, numberLabel ;
private int sizeOfStack ;
String sizeDialog = "0" ;
@Override
public void start(Stage primaryStage){
BorderPane border = new BorderPane();
// Buttons
push = new Button("PUSH");
pop = new Button("POP");
peek = new Button("PEEK");
empty = new Button("EMPTY");
push.setPrefSize(150, 50);
pop.setPrefSize(150, 50);
peek.setPrefSize(150, 50);
empty.setPrefSize(150, 50);
FlowPane bottom = new FlowPane();
bottom.setHgap(10);
bottom.setAlignment(Pos.CENTER);
bottom.getChildren().addAll(push, pop, peek, empty) ;
border.setBottom(bottom);
//Center
VBox center = new VBox(5);
center.setAlignment(Pos.CENTER);
size = new TextField();
size.setMaxWidth(200);
size.setEditable(false);
numberLabel = new Label("Enter a numbet: ");
numberText = new TextField();
numberText.setMaxWidth(200) ;
//sizeLabel = new Label("How many numbers? ");
create = new Button("Create a Stack");
build = new Button("Build the Stack");
create.setPrefWidth(200);
build.setPrefWidth(200);
build.setDisable(true);
center.getChildren().addAll(create, size, build) ;
border.setCenter(center);
//Stack TextFields --> right
create.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
TextInputDialog input = new TextInputDialog();
input.setContentText("How many Numbers");
input.setHeaderText("Size Of Stack");
input.setTitle("Stack");
input.showAndWait();
size.setAlignment(Pos.CENTER);
size.setText("Number Of Elements: " input.getEditor().getText());
sizeDialog = input.getEditor().getText() ;
build.setDisable(false);
}
});
sizeOfStack = Integer.parseInt(sizeDialog) ;
data = new TextField[sizeOfStack] ;
HBox right = new HBox(5);
build.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
create.setDisable(true);
numberText.setPromptText("Enter a number to push");
center.getChildren().addAll(numberLabel, numberText) ;
for(int i=0 ; i<sizeOfStack ; i ){
TextField text = new TextField();
data[i] = text ;
right.getChildren().add(data[i]) ;
}
}
});
border.setRight(right);
//Scene
Scene scene = new Scene(border, 800, 400) ;
primaryStage.setScene(scene);
primaryStage.setTitle("Stack");
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
`

uj5u.com熱心網友回復:
正如@James_D 指出的那樣,您需要sizeOfStack = Integer.parseInt(sizeDialog);在build.setOnAction. 你還需要搬家data = new TextField[sizeOfStack] ;。
我也移動了HBox right = new HBox(sizeOfStack);and border.setRight(right);,但這可能不是必需的。
代碼:
build.setOnAction((ActionEvent event) - > {
sizeOfStack = Integer.parseInt(sizeDialog);
data = new TextField[sizeOfStack];
create.setDisable(true);
numberText.setPromptText("Enter a number to push");
center.getChildren().addAll(numberLabel, numberText);
HBox right = new HBox(sizeOfStack);
for (int i = 0; i < sizeOfStack; i ) {
TextField text = new TextField();
data[i] = text;
right.getChildren().add(data[i]);
}
border.setRight(right);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/520023.html
上一篇:我怎樣才能讓用戶分配看起來堆疊?
下一篇:找不到專案視圖
