Soy nuevo en JavaFX, tratando de crear un programa GUI que muestre una factura para una mesa en un restaurante cuando hace clic en esa mesa. El espacio entre los botones de la mesa está mal y no estoy seguro de por qué.
La clase GUI para mi programa:
package restaurantBillingProgram; import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.layout.GridPane; import javafx.scene.control.Label; import javafx.scene.control.Button; import javafx.geometry.Pos; public class BillingGUI extends Application { @Override public void start(Stage primaryStage) { // Create grid pane GridPane pane = new GridPane(); pane.setAlignment(Pos.CENTER); pane.setHgap(5); pane.setVgap(5); // Label pane.add(new Label("Generate bill"), 1, 0); // Buttons Button btT1 = new Button("Table 1"); pane.add(btT1, 0, 1); btT1.setOnAction(e - > Billing.generateT1()); Button btT2 = new Button("Table 2"); pane.add(btT2, 1, 1); btT2.setOnAction(e - > Billing.generateT2()); Button btT3 = new Button("Table 3"); pane.add(btT3, 2, 1); btT3.setOnAction(e - > Billing.generateT3()); // Create scene and place in stage Scene scene = new Scene(pane, 250, 250); primaryStage.setTitle("Restaurant Billing Program"); primaryStage.setScene(scene); primaryStage.show(); } // Main method public static void main(String[] args) { launch(args); } }Del Javadoc:
Tamaño de fila/columna
De forma predeterminada, las filas y las columnas tendrán un tamaño que se ajuste a su contenido; una columna será lo suficientemente ancha para acomodar al niño más ancho, ...
La etiqueta en la fila 0 columna 1 obliga a que esa columna sea más ancha.
Probablemente desee que la etiqueta esté centrada y abarque las 3 columnas .
Mientras hace su diseño, use pane.setGridLinesVisible(true) . Esto solo debe usarse durante la depuración. Puede ser muy útil para situaciones como tu situación actual. Como señaló @Jim Garrison, su Label está causando el problema:
Asunto:
Una forma de solucionar esto es dejar que la Label abarque todas las columnas y centre el texto Label's .
Reparar:
Clave:
label.setMaxWidth(Double.MAX_VALUE); label.setAlignment(Pos.CENTER); pane.add(label, 0, 0, 3, 1);// Look at the following link to see how this add method works. https://openjfx.io/javadoc/11/javafx.graphics/javafx/scene/layout/GridPane.html#add(javafx.scene.Node,int,int,int,int)Código completo:
import javafx.application.Application; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.layout.GridPane; import javafx.scene.control.Label; import javafx.scene.control.Button; import javafx.geometry.Pos; public class BillingGUI extends Application { @Override public void start(Stage primaryStage) { // Create grid pane GridPane pane = new GridPane(); pane.setAlignment(Pos.CENTER); pane.setHgap(5); pane.setVgap(5); pane.setGridLinesVisible(true);//Use for debugging only!!!! // Label Label label = new Label("Generate bill"); label.setMaxWidth(Double.MAX_VALUE); label.setAlignment(Pos.CENTER); pane.add(label, 0, 0, 3, 1); // Buttons Button btT1 = new Button("Table 1"); pane.add(btT1, 0, 1); Button btT2 = new Button("Table 2"); pane.add(btT2, 1, 1); Button btT3 = new Button("Table 3"); pane.add(btT3, 2, 1); // Create scene and place in stage Scene scene = new Scene(pane, 250, 250); primaryStage.setTitle("Restaurant Billing Program"); primaryStage.setScene(scene); primaryStage.show(); } // Main method public static void main(String[] args) { launch(args); } }