2013-05-09 49 views
0

语境:布局的GridPanel了BorderPanel键钮式手风琴

  • 的Windows 7 64位
  • 公共JDK 7 “1.7.0_13” 建1.7.0_13-b20的

这里是一个SSCCE的两个快照编写,以显示一个奇怪的行为,有或没有手风琴作为一个单元到GridPane的布局,重现这些行为的代码,最后是我问的问题。

良好的渲染,如预期,“中心”的BorderPane的内容是标签:

Good rendering, as expected

按钮,“中心”的坏布局BorderPane的内容是手风琴:

Bad layout of the button

的代码:

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.

回答

1

什么是你的JavaFX版本?我用最新版本(Java的8 EAP B88)尝试过了,我的结果是这样的:

enter image description here

+0

是的,它是正确的,这个错误似乎是固定在JDK 8帖子编辑追加版本。 – Aubin 2013-05-10 14:00:19