Saltar al contenido

¿Cómo mostrar las líneas de cuadrícula del objeto GridPane de forma permanente y sin usar el método setGridLinesVisible()?

No busques más por internet ya que llegaste al espacio indicado, poseemos la respuesta que buscas sin problemas.

Hacer esto depende un poco de cómo haya configurado las cosas. Por la descripción de su aplicación, cuando he experimentado con cosas similares, siempre me ha parecido conveniente llenar la cuadrícula con espacios vacíos. Panes de algún tipo para actuar como las celdas y luego manipular su contenido en función de los datos del modelo. Si usa este enfoque, puede usar algo de CSS para colocar bordes (por ejemplo, usando fondos anidados) en las “celdas”, lo que dará el efecto de líneas de cuadrícula.

He aquí un ejemplo simple de este enfoque:

import javafx.application.Application;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.scene.Scene;
import javafx.scene.layout.ColumnConstraints;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.scene.layout.RowConstraints;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

public class GridPaneWithLines extends Application 


    private StackPane createCell(BooleanProperty cellSwitch) 

        StackPane cell = new StackPane();

        cell.setOnMouseClicked(e -> cellSwitch.set(! cellSwitch.get() ));

        Circle circle = new Circle(10, Color.CORNFLOWERBLUE);

        circle.visibleProperty().bind(cellSwitch);

        cell.getChildren().add(circle);
        cell.getStyleClass().add("cell");
        return cell;
    

    private GridPane createGrid(BooleanProperty[][] switches) 

        int numCols = switches.length ;
        int numRows = switches[0].length ;

        GridPane grid = new GridPane();

        for (int x = 0 ; x < numCols ; x++) 
            ColumnConstraints cc = new ColumnConstraints();
            cc.setFillWidth(true);
            cc.setHgrow(Priority.ALWAYS);
            grid.getColumnConstraints().add(cc);
        

        for (int y = 0 ; y < numRows ; y++) 
            RowConstraints rc = new RowConstraints();
            rc.setFillHeight(true);
            rc.setVgrow(Priority.ALWAYS);
            grid.getRowConstraints().add(rc);
        

        for (int x = 0 ; x < numCols ; x++) 
            for (int y = 0 ; y < numRows ; y++) 
                grid.add(createCell(switches[x][y]), x, y);
            
        

        grid.getStyleClass().add("grid");
        return grid;
    

    @Override
    public void start(Stage primaryStage) 
        int numCols = 5 ;
        int numRows = 5 ;

        BooleanProperty[][] switches = new BooleanProperty[numCols][numRows];
        for (int x = 0 ; x < numCols ; x++) 
            for (int y = 0 ; y < numRows ; y++) 
                switches[x][y] = new SimpleBooleanProperty();
            
        

        GridPane grid = createGrid(switches);

        StackPane root = new StackPane(grid);
        Scene scene = new Scene(root, 600, 600);
        scene.getStylesheets().add("grid-with-borders.css");
        primaryStage.setScene(scene);
        primaryStage.show();
    




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

y el CSS (grid-with-borders.css):

.root 
    -fx-padding: 20 ;
    cell-color: white ;
    cell-border-color: black ;

.grid 
    /* 1 pixel border around the top and right of the grid: */
    -fx-background-color: cell-border-color, cell-color ;
    -fx-background-insets: 0, 1 1 0 0 ;
    -fx-padding: 1 ;

.cell 
    /* 1 pixel border around the left and bottom of each cell: */
    -fx-background-color: cell-border-color, cell-color ;
    -fx-background-insets: 0, 0 0 1 1 ;

Esto funcionó para mí:

GridPane grid = new GridPane();
grid.setGridLinesVisible(true);

¡Solo para depuración!

Si está tratando de usar fxml, puede probar esto:

    

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *