Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 布局网格面板边框面板按钮手风琴_Java_Javafx 2 - Fatal编程技术网

Java 布局网格面板边框面板按钮手风琴

Java 布局网格面板边框面板按钮手风琴,java,javafx-2,Java,Javafx 2,背景: Windows 7 64位 公开JDK 7“1.7.0_13”构建1.7.0_13-b20 这里是两个SSCCE的快照,用来显示一个奇怪的布局行为,有或没有手风琴作为网格窗格中的一个单元格,重现这些行为的代码,最后是我提出的问题 良好的渲染效果,正如预期的那样,BorderPane的“中心”内容是一个标签: 按钮布局不正确,边框窗格的“中心”内容是手风琴: 守则: import javafx.application.Application; import javafx.geome

背景:

  • Windows 7 64位
  • 公开JDK 7“1.7.0_13”构建1.7.0_13-b20
这里是两个SSCCE的快照,用来显示一个奇怪的布局行为,有或没有手风琴作为网格窗格中的一个单元格,重现这些行为的代码,最后是我提出的问题

良好的渲染效果,正如预期的那样,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();
   }
}
问题是:

  • 为什么?
  • 如何帮助布局管理器计算按钮的正确大小

编辑

您的JavaFX版本是什么?我用最新版本(Java 8 EAP b88)进行了尝试,结果如下:


是的,这是正确的,这个错误似乎在JDK 8中得到了修复。后编辑以添加版本。