更改 hbox 节点位置
changing hbox nodes position
我想更改水平框中每个按钮的位置:
HBox buttom = new HBox();
Button delete_button = new Button("Delete");
Button showAll_button = new Button("Show All");
Button back_button = new Button("Back");
buttomPaneRight_deleteScene.getChildren().addAll(back_button,showAll_button,delete_button);
BorderPane basePane = new BorderPane();
basePane.setButtom(buttomPaneRight_deleteScene):
我想更改每个按钮的位置,例如 back_button
位于左角,delete_button
、showAll_button
位于右角。
我检查了 setAlignment(Pos.Value);
但这改变了整个 hbox pos
基本上不用HBox
。 AnchorPane
更适合您想要实现的目标。
AnchorPane holder = new AnchorPane();
Button delete_button = new Button("Delete");
Button showAll_button = new Button("Show All");
Button back_button = new Button("Back");
// Add buttons to holder
holder.getChildren().add(delete_button);
holder.getChildren().add(showAll_button);
holder.getChildren().add(back_button);
// Delete top left
AnchorPane.setTopAnchor (delete_button, 0.0);
AnchorPane.setLeftAnchor(delete_button, 0.0);
// Show all top right
AnchorPane.setTopAnchor (showAll_button, 0.0);
AnchorPane.setRightAnchor(showAll_button, 0.0);
// Back bottom right
AnchorPane.setBottomAnchor(back_button, 0.0);
AnchorPane.setRightAnchor (back_button, 0.0);
尝试使用不同的 Pane 选项,正如我之前提到的,GridPane 应该可以解决您的问题,或者嵌套另一个 HBox
看到这个http://docs.oracle.com/javafx/2/layout/builtin_layouts.htm
一个解决方案(有很多)就是简单地把你想要的按钮放在另一个按钮的右边 HBox
:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;
public class LayoutExample extends Application {
@Override
public void start(Stage primaryStage) {
BorderPane root = new BorderPane();
HBox hbox = new HBox();
Button backButton = new Button("Back");
Button deleteButton = new Button("Delete");
Button showAllButton = new Button("Show All");
HBox rightButtons = new HBox(deleteButton, showAllButton);
rightButtons.setAlignment(Pos.CENTER_RIGHT);
HBox.setHgrow(rightButtons, Priority.ALWAYS);
hbox.getChildren().addAll(backButton, rightButtons);
hbox.setPadding(new Insets(2));
root.setBottom(hbox);
Scene scene = new Scene(root, 600, 600);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
另一种解决方案是添加一个Pane
作为间隔物,并使其尽可能长:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;
public class LayoutExample extends Application {
@Override
public void start(Stage primaryStage) {
BorderPane root = new BorderPane();
HBox hbox = new HBox();
Button backButton = new Button("Back");
Button deleteButton = new Button("Delete");
Button showAllButton = new Button("Show All");
Pane spacer = new Pane();
HBox.setHgrow(spacer, Priority.ALWAYS);
hbox.getChildren().addAll(backButton, spacer, deleteButton, showAllButton);
hbox.setPadding(new Insets(2));
root.setBottom(hbox);
Scene scene = new Scene(root, 600, 600);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
第三种解决方案是使用 AnchorPane
而不是 HBox
,并将右侧的两个按钮包裹在 HBox
:
中
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;
public class LayoutExample extends Application {
@Override
public void start(Stage primaryStage) {
BorderPane root = new BorderPane();
AnchorPane anchorPane = new AnchorPane();
Button backButton = new Button("Back");
Button deleteButton = new Button("Delete");
Button showAllButton = new Button("Show All");
HBox rightButtons = new HBox(deleteButton, showAllButton);
anchorPane.getChildren().addAll(backButton, rightButtons);
AnchorPane.setBottomAnchor(rightButtons, 2.0);
AnchorPane.setBottomAnchor(backButton, 2.0);
AnchorPane.setLeftAnchor(backButton, 2.0);
AnchorPane.setRightAnchor(rightButtons, 2.0);
root.setBottom(anchorPane);
Scene scene = new Scene(root, 600, 600);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
第四种解决方案是使用 GridPane
:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;
public class LayoutExample extends Application {
@Override
public void start(Stage primaryStage) {
BorderPane root = new BorderPane();
GridPane gridPane = new GridPane();
Button backButton = new Button("Back");
Button deleteButton = new Button("Delete");
Button showAllButton = new Button("Show All");
gridPane.add(backButton, 0, 0);
gridPane.add(deleteButton, 1, 0);
gridPane.add(showAllButton, 2, 0);
ColumnConstraints leftCol = new ColumnConstraints();
leftCol.setHgrow(Priority.ALWAYS);
gridPane.getColumnConstraints().addAll(leftCol, new ColumnConstraints(), new ColumnConstraints());
gridPane.setPadding(new Insets(2));
root.setBottom(gridPane);
Scene scene = new Scene(root, 600, 600);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
我想更改水平框中每个按钮的位置:
HBox buttom = new HBox();
Button delete_button = new Button("Delete");
Button showAll_button = new Button("Show All");
Button back_button = new Button("Back");
buttomPaneRight_deleteScene.getChildren().addAll(back_button,showAll_button,delete_button);
BorderPane basePane = new BorderPane();
basePane.setButtom(buttomPaneRight_deleteScene):
我想更改每个按钮的位置,例如 back_button
位于左角,delete_button
、showAll_button
位于右角。
我检查了 setAlignment(Pos.Value);
但这改变了整个 hbox pos
基本上不用HBox
。 AnchorPane
更适合您想要实现的目标。
AnchorPane holder = new AnchorPane();
Button delete_button = new Button("Delete");
Button showAll_button = new Button("Show All");
Button back_button = new Button("Back");
// Add buttons to holder
holder.getChildren().add(delete_button);
holder.getChildren().add(showAll_button);
holder.getChildren().add(back_button);
// Delete top left
AnchorPane.setTopAnchor (delete_button, 0.0);
AnchorPane.setLeftAnchor(delete_button, 0.0);
// Show all top right
AnchorPane.setTopAnchor (showAll_button, 0.0);
AnchorPane.setRightAnchor(showAll_button, 0.0);
// Back bottom right
AnchorPane.setBottomAnchor(back_button, 0.0);
AnchorPane.setRightAnchor (back_button, 0.0);
尝试使用不同的 Pane 选项,正如我之前提到的,GridPane 应该可以解决您的问题,或者嵌套另一个 HBox
看到这个http://docs.oracle.com/javafx/2/layout/builtin_layouts.htm
一个解决方案(有很多)就是简单地把你想要的按钮放在另一个按钮的右边 HBox
:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;
public class LayoutExample extends Application {
@Override
public void start(Stage primaryStage) {
BorderPane root = new BorderPane();
HBox hbox = new HBox();
Button backButton = new Button("Back");
Button deleteButton = new Button("Delete");
Button showAllButton = new Button("Show All");
HBox rightButtons = new HBox(deleteButton, showAllButton);
rightButtons.setAlignment(Pos.CENTER_RIGHT);
HBox.setHgrow(rightButtons, Priority.ALWAYS);
hbox.getChildren().addAll(backButton, rightButtons);
hbox.setPadding(new Insets(2));
root.setBottom(hbox);
Scene scene = new Scene(root, 600, 600);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
另一种解决方案是添加一个Pane
作为间隔物,并使其尽可能长:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;
public class LayoutExample extends Application {
@Override
public void start(Stage primaryStage) {
BorderPane root = new BorderPane();
HBox hbox = new HBox();
Button backButton = new Button("Back");
Button deleteButton = new Button("Delete");
Button showAllButton = new Button("Show All");
Pane spacer = new Pane();
HBox.setHgrow(spacer, Priority.ALWAYS);
hbox.getChildren().addAll(backButton, spacer, deleteButton, showAllButton);
hbox.setPadding(new Insets(2));
root.setBottom(hbox);
Scene scene = new Scene(root, 600, 600);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
第三种解决方案是使用 AnchorPane
而不是 HBox
,并将右侧的两个按钮包裹在 HBox
:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;
public class LayoutExample extends Application {
@Override
public void start(Stage primaryStage) {
BorderPane root = new BorderPane();
AnchorPane anchorPane = new AnchorPane();
Button backButton = new Button("Back");
Button deleteButton = new Button("Delete");
Button showAllButton = new Button("Show All");
HBox rightButtons = new HBox(deleteButton, showAllButton);
anchorPane.getChildren().addAll(backButton, rightButtons);
AnchorPane.setBottomAnchor(rightButtons, 2.0);
AnchorPane.setBottomAnchor(backButton, 2.0);
AnchorPane.setLeftAnchor(backButton, 2.0);
AnchorPane.setRightAnchor(rightButtons, 2.0);
root.setBottom(anchorPane);
Scene scene = new Scene(root, 600, 600);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
第四种解决方案是使用 GridPane
:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;
public class LayoutExample extends Application {
@Override
public void start(Stage primaryStage) {
BorderPane root = new BorderPane();
GridPane gridPane = new GridPane();
Button backButton = new Button("Back");
Button deleteButton = new Button("Delete");
Button showAllButton = new Button("Show All");
gridPane.add(backButton, 0, 0);
gridPane.add(deleteButton, 1, 0);
gridPane.add(showAllButton, 2, 0);
ColumnConstraints leftCol = new ColumnConstraints();
leftCol.setHgrow(Priority.ALWAYS);
gridPane.getColumnConstraints().addAll(leftCol, new ColumnConstraints(), new ColumnConstraints());
gridPane.setPadding(new Insets(2));
root.setBottom(gridPane);
Scene scene = new Scene(root, 600, 600);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}