0
语境:布局的GridPanel了BorderPanel键钮式手风琴
- 的Windows 7 64位
- 公共JDK 7 “1.7.0_13” 建1.7.0_13-b20的
这里是一个SSCCE的两个快照编写,以显示一个奇怪的行为,有或没有手风琴作为一个单元到GridPane的布局,重现这些行为的代码,最后是我问的问题。
良好的渲染,如预期,“中心”的BorderPane的内容是标签:
按钮,“中心”的坏布局BorderPane的内容是手风琴:
的代码:
import javafx.application.Application;
import javafx.geometry.HPos;
import javafx.scene.Scene;
import javafx.scene.control.Accordion;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.stage.Stage;
public class SSCCE extends Application {
public static final boolean TOO_BIG_BUTTON = true;
// public static final boolean TOO_BIG_BUTTON = false;
public static void main(String[] args) {
launch(args);
}
@SuppressWarnings("nls")
@Override
public void start(Stage stage) {
TextField tf = new TextField("textfield");
BorderPane bp = new BorderPane();
Label lv = new Label("BorderPane - Center - Center - Center - Center - Center");
lv.setPrefHeight(96.0);
if(TOO_BIG_BUTTON) {
Accordion acc = new Accordion();
TitledPane tp = new TitledPane("Titled pane", lv);
acc.getPanes().add(tp);
acc.setExpandedPane(tp);
stage.setTitle("SSCCE - too large button");
bp.setCenter(acc);
}
else {
stage.setTitle("SSCCE - as expected");
bp.setCenter(lv);
}
GridPane gp = new GridPane();
Label lbl = new Label("Label: ");
Button btn = new Button("button");
btn.setMaxWidth(Double.MAX_VALUE);
gp.add(lbl, 0, 1);
gp.add(tf , 1, 1);
gp.add(btn, 2, 1);
gp.add(bp , 0, 2, 3, 1);
GridPane.setHgrow(tf , Priority.ALWAYS);
GridPane.setHgrow(btn, Priority.NEVER );
GridPane.setHalignment(btn, HPos.RIGHT);
stage.setScene(new Scene(gp));
stage.centerOnScreen();
stage.show();
}
}
问题:
- 为什么?
- 如何帮助布局管理器计算按钮的正确尺寸?
编辑Bug entered into JavaFX bug tracking system Jira.
是的,它是正确的,这个错误似乎是固定在JDK 8帖子编辑追加版本。 – Aubin 2013-05-10 14:00:19