2017-01-26 8 views
-1
import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

public class ButtonInPane extends Application { 
@Override 
// Override the start method in the Application class 

public void start(Stage primaryStage) { 
// Create a scene and place a button in the scene 

StackPane pane = new StackPane(); 
pane.getChildren().add(new Button("OK")); 
Scene scene = new Scene(pane, 200, 50); 
primaryStage.setTitle("Button in a pane"); // Set the stage title 
primaryStage.setScene(scene); // Place the scene in the stage 
primaryStage.show(); // Display the stage 
} 

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

Приведенный выше код создает графический интерфейс пользователя с помощью кнопки на нем. Но я не понимаю, что такое панель и зачем она нам нужна. Я также не понимаю, почему мы должны вызвать метод GetChildren когда мы добавим кнопку к нему, например,Что такое "панель" в JavaFx?

"pane.getChildren().add(new Button("OK"));". 
+0

Символ 'Pane' является элементом пользовательского интерфейса («узел»), который содержит другие элементы пользовательского интерфейса («дочерние узлы») и управляет расположением этих узлов в пределах 'Pane'. Существует несколько предопределенных типов «Панели» (подклассы «Панели»), которые отличаются тем, как они выкладывают свои дочерние узлы. –

ответ

4

Из layout manual:

приложение JavaFX вручную раскладывать интерфейс с помощью устанавливая свойства позиции и размера для каждого элемента пользовательского интерфейса. Однако более простой вариант - использовать панели макета. JavaFX SDK предоставляет несколько макетов для простой настройки и управления классическими макетами, такими как строки, столбцы, стопки, плитки и другие. По мере изменения размера окна панель макета автоматически репозиционирует и изменяет размеры узлов, которые она содержит в соответствии со свойствами для узлов.

В javaFX есть 6 панелей, таких как: BorderPane, StackPane, GridPane, FlowPane, TilePane и AnchorPane.

StackPane

Stack панель позволяет разместить много узлов один поверх другого.

StackPane root = new StackPane(); 
Button btn1 = new Button(" 1 "); 
Button btn2 = new Button("22222222"); 
root.getChildren().addAll(btn2, btn1); 
root.setStyle("-fx-background-color: #87CEFA;"); 

GridPane

GridPane позволяет создать гибкую сетку из строк и столбцов, и положение каждого узла в точном месте.

GridPane grid = new GridPane(); 
grid.setPadding(new Insets(10, 10, 10, 10)); 
grid.setMinSize(300, 300); 
grid.setVgap(5); 
grid.setHgap(5); 

Text username = new Text("Username:"); 
grid.add(username, 0, 0); 

TextField text = new TextField(); 
text.setPrefColumnCount(10); 
grid.add(text, 1, 0); 

Text password = new Text("Password:"); 
grid.add(password, 0, 1); 

TextField text2 = new TextField(); 
text2.setPrefColumnCount(10); 
grid.add(text2, 1, 1); 
grid.setStyle("-fx-background-color: #D8BFD8"); 

FlowPane

потока Панель устанавливает все узлы один после другого в том порядке, они были добавлены.

FlowPane flow = new FlowPane(); 
flow.setPadding(new Insets(10, 10, 10, 10)); 
flow.setStyle("-fx-background-color: DAE6F3;"); 
flow.setHgap(5); 
flow.getChildren().addAll(left, center); 

TilePane

TilePane аналогична панели потока. Все узлы помещаются в сетку в том же порядке, в каком они были добавлены.

TilePane tile = new TilePane(); 
tile.setPadding(new Insets(10, 10, 10, 10)); 
tile.setPrefColumns(2); 
tile.setStyle("-fx-background-color: #CD5C5C;"); 
HBox hbox2 = new HBox(8); // spacing = 8 
hbox2.getChildren().addAll(top, left, center); 
tile.getChildren().add(hbox2); 

AnchorPane

AnchorPane позволяет узлам позиции в верхней, нижней, левой, правой или центральной части панели.

AnchorPane anchorpane = new AnchorPane(); 
Button buttonSave = new Button("Save"); 
Button buttonCancel = new Button("Cancel"); 
anchorpane.setStyle("-fx-background-color: #A9A9A9;"); 
HBox hb = new HBox(); 
hb.getChildren().addAll(buttonSave, buttonCancel); 
anchorpane.getChildren().addAll(hb); 
anchorpane.setMinSize(300, 100); 
AnchorPane.setRightAnchor(hb, 10.0); 

BorderPane

BorderPane делит сцену в пяти регионах, таких как: сверху, снизу, слева, справа, и в центре. Где вы можете настроить добавленные узлы. BorderPane также позволяет добавлять разные области в каждом регионе, как показано в моем примере. Однако вы не можете использовать одну и ту же панель более одного раза.

BorderPane pane = new BorderPane(); 
pane.setLeft(anchorpane); 
pane.setCenter(root); 
pane.setRight(grid); 
pane.setTop(flow); 
pane.setBottom(tile); 

Scene scene = new Scene(pane, 300, 250); 
+0

Итак, что панель - это просто область в сцене, которая меняет размеры при изменении размера окна? – Rongeegee

+0

Да, это своего рода контейнер для контроля, который удерживает их вместе. –

Смежные вопросы