设置某些特定的跨度配置时,GridPane自动调整存在一个问题。JavaFX 8 - GridPane自动调整问题
以下配置工程,我想到:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.Border;
import javafx.scene.layout.BorderStroke;
import javafx.scene.layout.BorderStrokeStyle;
import javafx.scene.layout.BorderWidths;
import javafx.scene.layout.CornerRadii;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class GridPaneWidthIssue extends Application {
public static void main(String... arguments) {
launch(arguments);
}
@Override
public void start(Stage primaryStage) throws Exception {
GridPane gridPane = new GridPane();
BorderStroke borderStroke = new BorderStroke(Color.RED,
BorderStrokeStyle.SOLID, CornerRadii.EMPTY,
BorderWidths.DEFAULT);
Border border = new Border(borderStroke);
gridPane.setBorder(border);
gridPane.setGridLinesVisible(true);
gridPane.setHgap(2);
gridPane.setVgap(2);
gridPane.setPadding(new Insets(10));
Label column0 = new Label("Column 0");
Label column1 = new Label("Column 1");
Label column2 = new Label("Column 2");
Label column01 = new Label("Span column 0 and 1");
Label column012 = new Label("Span column 0, 1 and 2");
gridPane.add(column0, 0, 0);
gridPane.add(column1, 1, 0);
gridPane.add(column2, 2, 0);
gridPane.add(column01, 0, 1, 2, 1);
gridPane.add(column012, 0, 2, 3, 1);
Scene scene = new Scene(gridPane);
primaryStage.setScene(scene);
primaryStage.show();
}
}
我不能发布图片还没有证明这一点,但我可以确认以下断言:
** gridpane.width = column0.width + column1.width + column2.width
当我行0中删除标签,我得到了下面的代码:
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.Border;
import javafx.scene.layout.BorderStroke;
import javafx.scene.layout.BorderStrokeStyle;
import javafx.scene.layout.BorderWidths;
import javafx.scene.layout.CornerRadii;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class GridPaneWidthIssue extends Application {
public static void main(String... arguments) {
launch(arguments);
}
@Override
public void start(Stage primaryStage) throws Exception {
GridPane gridPane = new GridPane();
BorderStroke borderStroke = new BorderStroke(Color.RED,
BorderStrokeStyle.SOLID, CornerRadii.EMPTY,
BorderWidths.DEFAULT);
Border border = new Border(borderStroke);
gridPane.setBorder(border);
gridPane.setGridLinesVisible(true);
gridPane.setHgap(2);
gridPane.setVgap(2);
gridPane.setPadding(new Insets(10));
Label column0 = new Label("Column 0");
Label column1 = new Label("Column 1");
Label column2 = new Label("Column 2");
Label column01 = new Label("Span column 0 and 1");
Label column012 = new Label("Span column 0, 1 and 2");
// gridPane.add(column0, 0, 0);
// gridPane.add(column1, 1, 0);
// gridPane.add(column2, 2, 0);
gridPane.add(column01, 0, 1, 2, 1);
gridPane.add(column012, 0, 2, 3, 1);
Scene scene = new Scene(gridPane);
primaryStage.setScene(scene);
primaryStage.show();
}
}
而结果是不正确的:
gridpane.width> column0.width + column1.width + column2.width
我没有验证,但我猜是:
gridpane.width = column0.width + column1.width + column0.width + column1.width + column2.width
JavaFX问题或我误解了Gridpane调整策略?
案例1:OK
案例2:KO(在GridPane空白空间)
你能澄清你的意思吗?我会将你的伪代码'column0.width'解释为'Label column0;'等的宽度。显然这在你的第二个例子中是没有意义的,因为'column0.width'将是零(类似于其他),因为这些标签不显示。 (不管怎样,第一个例子中都不是这样。)那么你是指实际列的宽度?如果是这样,因为在第一个例子中它必须包含'hgap' ......但在第二个例子中它变得平凡无奇。所以你是什么意思? (我会upvote,所以你可以张贴图像。) – 2015-02-05 18:58:41
你是对的,通过专栏0我不是指标签,而是列本身,我没有在我的伪代码中包含hgaps。我添加了空白来制作截图明确。我会尽快上传这两种情况的截图,你会清楚地看到问题:在第二种情况下,column2右边有一个空的空间。这个空间在gridpane里面。在这个特定的例子中,当column0或column1增长时,这个空间会增长。这就是为什么我猜空白空间宽度=列0的宽度+列1的。这只是一个猜测,但无论如何,空荡荡的空间令人讨厌。 – Jonathan 2015-02-06 07:26:39