更改GridPane中节点的列/行索引

时间:2015-08-10 16:35:51

标签: java javafx javafx-8

我使用GridPane作为n×m矩阵,我需要能够调整水平条的大小。

我有一个我作为GridPane的孩子添加的Circle,我有一个动作监听器,它允许我调整水平条的大小,并且它正常工作。

我正在使用

int col = GridPane.getColumnIndex(dragAnchor);

获取锚所在的索引,然后我调用:

GridPane.setColumnIndex(dragAnchor, newCol); 

(其中newCol是返回值+/- 1,具体取决于我是增大还是减小尺寸)。

当我这样做时,Circle节点不会在gridPane上移动,返回的col也是正确的位置。移动已经添加到GridPane的节点还有其他必须做的事情吗?

1 个答案:

答案 0 :(得分:1)

正如预期的那样没有问题。由于gridpane的空列(单元格)的宽度为0,因此您可能无法在应用中观察到“移动”。要调试可视化将gridLinesVisible设置为true并添加一些行/列约束。请参阅以下示例:

@Override
public void start( Stage stage )
{

    GridPane gp = new GridPane();
    Label l = new Label( "before" );
    Button b = new Button( "move" );

    b.setOnAction( ( e ) ->
    {
        int i = GridPane.getColumnIndex( l );
        System.out.println( "i = " + i );
        l.setText( "after" );
        GridPane.setColumnIndex( l, 2 );
    } );

    gp.add( l, 0, 0 );
    gp.add( b, 1, 1 );
    gp.setGridLinesVisible( true );
    gp.getColumnConstraints().addAll( new ColumnConstraints( 70 ), new ColumnConstraints( 70 ), new ColumnConstraints( 70 ) );

    final Scene scene = new Scene( gp, 400, 300 );

    stage.setScene( scene );
    stage.show();
}