Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
JavaFx在不使用FXML的情况下为Stage使用\u计算的\u大小_Java_User Interface_Javafx_Height_Width - Fatal编程技术网

JavaFx在不使用FXML的情况下为Stage使用\u计算的\u大小

JavaFx在不使用FXML的情况下为Stage使用\u计算的\u大小,java,user-interface,javafx,height,width,Java,User Interface,Javafx,Height,Width,在JavaFX场景生成器中,我可以为控件或容器的最小、最大和首选宽度和高度选择一个值。有一些预定义的值,如USE\u COMPUTED\u SIZE 我得出的结论是,我不喜欢在我当前的项目中使用FXML,原因有几个,现在我想知道在不使用FXML时如何设置这些值 我该怎么做 我尝试了以下代码: initializeControls(); addControls(); setMinHeight(Control.USE_COMPUTED_SIZE); setMinWidth(Control.USE

在JavaFX场景生成器中,我可以为控件或容器的最小、最大和首选宽度和高度选择一个值。有一些预定义的值,如USE\u COMPUTED\u SIZE

我得出的结论是,我不喜欢在我当前的项目中使用FXML,原因有几个,现在我想知道在不使用FXML时如何设置这些值

我该怎么做

我尝试了以下代码:

initializeControls();
addControls();


setMinHeight(Control.USE_COMPUTED_SIZE);
setMinWidth(Control.USE_COMPUTED_SIZE);

addActionListeners();
addFocusChangeListeners();
但是,尝试创建阶段时会导致异常:

Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: The width and height must be >= 0. Got: width=-1; height=-1
at com.sun.glass.ui.Window.setMinimumSize(Window.java:984)
at com.sun.javafx.tk.quantum.WindowStage.setMinimumSize(WindowStage.java:291)
at javafx.stage.Stage.impl_visibleChanging(Stage.java:1154)
at javafx.stage.Window$9.invalidated(Window.java:743)
at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:109)
at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:143)
at javafx.stage.Window.setShowing(Window.java:841)
at javafx.stage.Window.show(Window.java:856)
at javafx.stage.Stage.show(Stage.java:255)
at dictionary.MainApp.trainVocablesButtonActionPerformed(MainApp.java:281)
at dictionary.MainApp.lambda$addActionListeners$2(MainApp.java:240)
at dictionary.MainApp$$Lambda$281/81350454.handle(Unknown Source)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8216)
at javafx.scene.control.Button.fire(Button.java:185)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3724)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3452)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1728)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2461)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:348)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:273)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:382)
at com.sun.glass.ui.View.handleMouseEvent(View.java:553)
at com.sun.glass.ui.View.notifyMouse(View.java:925)
at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at com.sun.glass.ui.gtk.GtkApplication.lambda$null$45(GtkApplication.java:126)
at com.sun.glass.ui.gtk.GtkApplication$$Lambda$42/379110473.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
我猜,我从错误的类中获取了USE_COMPUTED_SIZE值,但是我从哪里获得正确的值呢?还是整个方法都错了

我的最终目标是让舞台占据尽可能多的空间来显示其中的所有控件和容器,而不是更多

编辑1: 更正:它应该占用最小宽度和高度所需的空间,这样窗口仍然可以调整大小,但不能太小以至于不再显示控件

编辑2: 尝试在较小示例应用程序上设置最小宽度+高度的结果:

代码:


其中一条评论帮助我找到了一个解决方案,尽管它可能不是最好的解决方案: 将所有控件添加到场景后,我只需执行以下操作:

setMinWidth(getWidth());
setMinHeight(getHeight());

这是因为JavaFX最初将舞台设置为其场景控件所需的大小。

可能会晚到派对,但我发现:

对于Textfield,有一个静态字段Textfield.USE_COMPUTED_SIZE,其值为-1


我假设您也可以将-1传递给Stage。

通常最好提供复制您提供的堆栈跟踪的。另请注意:我理解,但这是一个计算值,我希望它是宽度和高度的最小值,这样窗口可以变大,但不能小于计算的大小。关于代码:这真的是那个阶段的代码页面,在这里放这么多真的合适吗?此外,我必须首先让它自己执行,因为它不是我的应用程序的主窗口,或者更多的代码,发布整个应用程序。我认为无论舞台是什么,都应该有一个标准的方法来达到预期的效果。我就是想不出来:/当然你可以从头开始创建一个完整的可执行示例,做同样的事情,但只涉及几行代码?实际上这很难。从零开始不会因为某种原因导致相同的异常,我不知道,如果它也这样做,它将不仅仅涉及几行代码,因为相同的代码相当多。然而,另一个较小的示例应用程序发生了一些不同的情况,我尝试使用它:minSize被忽略/具有错误的值。我仍然可以使窗户小于所需的空间。有没有一个通用的方法来获得这种效果?这是这里的主要问题。EDIT2:添加了不同结果的较小示例。
setMinWidth(getWidth());
setMinHeight(getHeight());