2016-08-16 71 views
0

我有一个按钮称为添加新用户,方法是弹出一个包含添加用户表单的窗口。 这里是我的那个按钮的功能:添加表单到弹出阶段(自定义阶段内容)

public void btnAddeNewClicked(){ 


     final TextField name = new TextField() ; 
     final TextField addr = new TextField() ; 
     final TextField wp = new TextField() ; 
     final TextField state = new TextField() ; 
     final TextField loginName = new TextField() ; 
     final Label labelUsername = new Label(); 
     final Label labelAddress = new Label(); 
     final Label labelWebPage = new Label(); 
     final Label labelState = new Label(); 
     final Label labelloginName = new Label(); 
     final Button btn = new Button("Add"); 


     Stage dialog = new Stage(); 
     dialog.initStyle(StageStyle.UTILITY); 
     Scene scene = new Scene(btn); 
     dialog.setScene(scene); 
     dialog.show(); 


} 

问题是我不知道如何添加我的形式进入我的舞台。任何帮助强烈感谢:)

回答

2

使用任何layout添加弹出窗口的内容。稍后,将此布局添加为场景的根目录。

在以下示例中,我使用了GridPane

import javafx.application.Application; 
import javafx.geometry.HPos; 
import javafx.geometry.Insets; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.control.TextField; 
import javafx.scene.layout.GridPane; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 
import javafx.stage.StageStyle; 

public class Main extends Application { 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     Button button = new Button("Show Popup"); 
     button.setOnAction(e -> btnAddeNewClicked()); 
     Scene scene = new Scene(new StackPane(button), 200, 200); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public void btnAddeNewClicked(){ 

     final TextField name = new TextField() ; 
     final TextField addr = new TextField() ; 
     final TextField wp = new TextField() ; 
     final Label labelUsername = new Label("Username"); 
     final Label labelAddress = new Label("Address"); 
     final Label labelWebPage = new Label("Web Page"); 
     final Button btn = new Button("Add"); 

     GridPane gridPane = new GridPane(); 
     gridPane.setVgap(10); 
     gridPane.setHgap(10); 
     gridPane.setPadding(new Insets(10)); 

     gridPane.add(labelUsername, 0, 0); 
     gridPane.add(name, 1, 0); 
     gridPane.add(labelAddress, 0, 1); 
     gridPane.add(addr, 1, 1); 
     gridPane.add(labelWebPage, 0, 2); 
     gridPane.add(wp, 1, 2); 
     gridPane.add(btn, 0, 3, 2, 1); 
     GridPane.setHalignment(btn, HPos.CENTER); 

     Stage dialog = new Stage(); 
     dialog.initStyle(StageStyle.UTILITY); 
     Scene scene = new Scene(gridPane); 
     dialog.setScene(scene); 
     dialog.show(); 
    } 
} 

输出

enter image description here

1

选择合适的布局Parent将您的Node s添加到。有很多的可能性,所以我只是用一个非常简单的演示一下:VBox,它只是把地方所有的孩子在一个垂直列:

final TextField name = new TextField() ; 
final TextField addr = new TextField() ; 
final TextField wp = new TextField() ; 
final TextField state = new TextField() ; 
final TextField loginName = new TextField() ; 
final Label labelUsername = new Label(); 
final Label labelAddress = new Label(); 
final Label labelWebPage = new Label(); 
final Label labelState = new Label(); 
final Label labelloginName = new Label(); 
final Button btn = new Button("Add"); 

VBox root = new VBox(); 
root.getChildren().addAll(name, 
          addr, 
          wp, 
          state, 
          loginName, 
          labelUsername, 
          labelAddress, 
          labelWebPage, 
          labelState, 
          labelloginName, 
          btn); 

Stage dialog = new Stage(); 
dialog.initStyle(StageStyle.UTILITY); 
Scene scene = new Scene(root); 
dialog.setScene(scene); 
dialog.show(); 

注意,这些布局可以作为其他儿童布局也是如此,如果需要更复杂的布局。使用SceneBuilder对初学者来说可能会更容易,但是您应该知道布局如何定位孩子。很容易看到生成的fxml文件中的子父母关系在Java代码中重现相同的布局。