JavaFx 让 HBox 项目使用提供的所有宽度
JavaFx let HBox Items use all width provided
我有一个 JavaFx 应用程序,为了获得我的特定布局,我使用了一些 H- 和 VBox。在一个 HBox 中,我有一个文本字段和一个按钮,我希望它们占用此 HBox 中所有可能的 space。
vboxRight = new VBox(); //This is the right VBox
vboxRight.setSpacing(10);
//This HBox represents the first "Line"
hboxLine = new HBox();
hboxLine.setSpacing(10);
hboxLine.setMinHeight(30);
//Textbox
txtField = new TextField();
txtField.setMinHeight(30);
//Button
btn = new Button("Search");
btn.setMinHeight(30);
btn.setOnAction(this);
hboxLine.getChildren().addAll(txtField, btn);
vboxRight.getChildren().addAll(hboxLine);
有什么办法可以做到吗?也许 css?
使用 HBox.setHgrow()
应该可以解决您的问题。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
/**
*
* @author blj0011
*/
public class JavaFXApplication50 extends Application
{
@Override
public void start(Stage primaryStage)
{
VBox vboxRight = new VBox(); //This is the right VBox
vboxRight.setSpacing(10);
//This HBox represents the first "Line"
HBox hboxLine = new HBox();
hboxLine.setSpacing(10);
hboxLine.setMinHeight(30);
//Textbox
TextField txtField = new TextField();
txtField.setMinHeight(30);
//Button
Button btn = new Button("Search");
btn.setMinHeight(30);
//btn.setOnAction(this);
HBox.setHgrow(txtField, Priority.ALWAYS);//Added this line
HBox.setHgrow(btn, Priority.ALWAYS);//Added this line
hboxLine.getChildren().addAll(txtField, btn);
vboxRight.getChildren().addAll(hboxLine);
Scene scene = new Scene(vboxRight, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
launch(args);
}
}
Before:
After:
我有一个 JavaFx 应用程序,为了获得我的特定布局,我使用了一些 H- 和 VBox。在一个 HBox 中,我有一个文本字段和一个按钮,我希望它们占用此 HBox 中所有可能的 space。
vboxRight = new VBox(); //This is the right VBox
vboxRight.setSpacing(10);
//This HBox represents the first "Line"
hboxLine = new HBox();
hboxLine.setSpacing(10);
hboxLine.setMinHeight(30);
//Textbox
txtField = new TextField();
txtField.setMinHeight(30);
//Button
btn = new Button("Search");
btn.setMinHeight(30);
btn.setOnAction(this);
hboxLine.getChildren().addAll(txtField, btn);
vboxRight.getChildren().addAll(hboxLine);
有什么办法可以做到吗?也许 css?
使用 HBox.setHgrow()
应该可以解决您的问题。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
/**
*
* @author blj0011
*/
public class JavaFXApplication50 extends Application
{
@Override
public void start(Stage primaryStage)
{
VBox vboxRight = new VBox(); //This is the right VBox
vboxRight.setSpacing(10);
//This HBox represents the first "Line"
HBox hboxLine = new HBox();
hboxLine.setSpacing(10);
hboxLine.setMinHeight(30);
//Textbox
TextField txtField = new TextField();
txtField.setMinHeight(30);
//Button
Button btn = new Button("Search");
btn.setMinHeight(30);
//btn.setOnAction(this);
HBox.setHgrow(txtField, Priority.ALWAYS);//Added this line
HBox.setHgrow(btn, Priority.ALWAYS);//Added this line
hboxLine.getChildren().addAll(txtField, btn);
vboxRight.getChildren().addAll(hboxLine);
Scene scene = new Scene(vboxRight, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
launch(args);
}
}
Before:
After: