2016-12-05 76 views
0

我想改变在hbox中每个BUTTOM的位置:改变hbox中的节点位置

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_buttonshowAll_button是在右角。 我检查了setAlignment(Pos.Value);,但是这改变了整个hbox pos

+1

你为什么不试试锚窗格而不是Hbox?或混合这些? – theBeacon

+0

您可以将窗格设置为GridPane,并将ColumnConstraints设置为GridPane中的所需位置,或者,您可以在第一个Hbox下面的边框窗格中为您的按钮嵌套另一个HBox – remedy

+1

您希望“deleteButton”的位置是?正如其他人所建议的那样,您可能(可能)使用了错误的布局窗格,但除非您更确切地指定您想要的内容,否则很难说正确的是什么。 –

回答

2

一个解决方案(有很多)是简单地包裹你想要的按钮在右边的另一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); 
    } 
} 

enter image description here

另一种解决方案是增加一个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); 
    } 
} 
+0

谢谢你,你总是有最好的解决方案 – MrRizk

1

基本上不使用HBoxAnchorPane更适合你想要达到的目标。

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);