javafx 最小化中的Stage窗口怎么最大化,最小化

(翻译)JavaFX高级教程:JavaFX2.0的FXML语言 - 经过一个过程,然后成为自己 - ITeye技术网站
博客分类:
原文地址/javafx/2.0/fxml_get_started/jfxpub-fxml_get_started.htm
FXML是JavaFX 2.0新引入的。你可能会问"What is FXML?" 和"Is FXML for me?" FXML 是基于XML的一种声明性标记语言,用来定义应用的用户接口。FXML对于定义静态的布局很便利,诸如form, control, 和table。使用FXML也可以动态构造布局,不过要结合脚本。
FXML是一个优势是基于XML,所以多数开发者,尤其是web开发者和其他RIA平台的开发者会很熟悉它。另一个优势是FXML不是编译型语言,不需要编译后才能看出变化。第三个好处是可以很简单的看到应用场景的结构。反过来,也就很简单地可以在组内进行合作开发用户接口。
要对比JavaFX和FXML,看图
.构成该应用的场景包括一个边框布局,在它的顶部和中间各有一个标签。
Figure 1 Border Pane Simple Example
是相应的JavaFX代码.
Example 1 JavaFX Scene Graph
BorderPane border = new BorderPane();
Label toppanetext = new Label("Page Title");
border.setTop(toppanetext);
Label centerpanetext = new Label ("Some data here");
border.setCenter(centerpanetext);
是相应的FXML.
Example 2 FXML Scene Graph
&BorderPane&
&Label text="Page Title"/&
&Label text="Some data here"/&
&/BorderPane&
展示FXML优势的最好方法是例子。本指南讲解如何创建
中的登陆界面 .
Figure 2 Login User Interface
开始之前先熟悉一下
中的用户接口. 该接口使用了一个包含两部分的边框布局。顶区域包括一个堆栈布局,里面是用文本Label Example覆盖一副图片。
中部区域是一个网格布局,有标签、文本框、密码框和按钮。
Figure 3 Layout of Login User Interface
要创建该界面,我们需完成以下任务:
本指南使用NetBeans IDE.请确保NetBeans IDE的版本支持JavaFX 2.0。
要完成本文,应熟悉用JavaFX编用户接口。尤其要知道场景的知识,因为FXML的语法结构和JavaFX的场景很像。
第一步是建立JavaFX工程。
从File菜单选择
New Project
application category中,选择JavaFX FXML Application,点
输入名称 FXMLExample点击
. NetBeans IDE打开了工程。有三个文件:FXMLExample.java, Sample.fxml, and Sample.java.
下载浅蓝色渐变的
图片到桌面,用来当背景。然后把它拖到fxmlexample文件夹下。
每个 FXML 应用必须包含一些JavaFX代码,最少也有创建舞台和场景还有启动的代码。
打开FXMLExample.java
,删除NetBeans IDE生成的代码,用下面的代码代替。
Example 3 FXMLExample.java
import java.util.ResourceB
import javafx.application.A
import javafx.fxml.FXMLL
import javafx.scene.P
import javafx.scene.S
import javafx.stage.S
public class FXMLExample extends Application {
public void start(Stage stage) throws Exception {
stage.setTitle("FXML Example");
Parent root = FXMLLoader.load(getClass().getResource("fxml_example.fxml"),
ResourceBundle.getBundle("fxmlexample.fxml_example"));
Scene scene = new Scene(root, 226, 264);
stage.setScene(scene);
stage.show();
public static void main(String[] args) {
launch(args);
作为一个JavaFX编程者,应该很熟悉创建舞台和场景。而然,这一行是FXML特有的:
Parent root = FXMLLoader.load(getClass().getResource("fxml_example.fxml"), ResourceBundle.getBundle("fxmlexample.fxml_example"));
FXMLLoader.load()方法从文件
fxml_example.fxml加载了目标层次并分配给变量root。 getResources参数增加了一个资源束 来为用户接口具体化,使得诸如定位任务更简单。后面将使用一个配置文件回到资源束并创建FXML源文件。 总之,场景已经创建,root变量是场景根元素。 FXML的根元素标记为场景的根。
创建配置文件
最佳实践是将字符串外部化,把它们放进配置文件。按照以下步骤创建用户登录界面的配置文件。
在Projects窗口,右击 fxmlexample文件夹,选择New
,然后是Other
在New File对话框,点击Other
,然后是Properties File
输入fxml_example作为名称,点Finish。 IDE打开了该文件,其扩展名是.properties。
输入资源名称和值,如
Example 4 Resource names in fxml_example.properties
loginExample=Login Example
signIn=Sign in:
userName=Username:
password=Password:
submit=Submit
创建FXML文件
现在创建fxml_example.fxml文件并插入XML声明和导入语句。
在Projects窗口,右击Sample.fxm,选择Rename
输入fxml_example后点OK
打开fxml_example文件,删除自动生成代码,用下面的取代
Example 5 Declaration and Import Statements
&?xml version="1.0" encoding="UTF-8"?&
&?import javafx.scene.layout.*?&
&?import javafx.scene.control.*?&
&?import javafx.scene.*?&
&?import javafx.scene.image.*?&
所有FXML文件必须以XML声明开始。它定义了XML版本(1.0)和编码类型(UTF-8).
在JavaFX中,类名称可以被完整描述(包括包名),或者是使用导入语句,见
.只要你喜欢,你可以完整导入所以相关类。
定义边框布局
下面开始构建用户界面。在导入语句后面插入下面代码
Example 6 Border Pane Layout
&BorderPane fx:controller="fxmlexample.FXMLExampleController" xmlns:fx="/fxml"&
&/BorderPane&
本例中,场景根是BorderPane布局类,定义了两快区域,顶部和中部。
fx:controller属性定义了控制器文件,必须要声明在FXML根元素中。后面还会更多的了解控制器。
xmlns:fx="/fxml"属性将命名空间映射到 /fxml。命名空间也必须声明在FXML根元素中。该属性让你可以使用JavaFX API相关的FXML标签。
在图像上覆盖文字
现在,在边框布局的顶区域放置一个堆栈布局。该布局包括一个标签和被覆盖的图片,见
Figure 4 Top Region of Border Pane, Including Stack Pane
堆栈布局的代码是
.把它们插入在 &top&
&/top&标签之间。
Example 7 Stack Text Over an Image
&StackPane&
&children&
&ImageView&
&Image url="@fx_boxback.jpg"/&
&/ImageView&
&Label text="%loginExample" style="-fx-font: NORMAL 20 T"/&
&/children&
&/StackPane&
StackPane布局将其孩子结点放进一个栈中,后面的会放在之前的上面。该布局可以很方便的把文本放在图片上。
&children&
标签把孩子结点加入到场景中,就像使用getChildren().add()方法。
Image类加载了图片 fx_boxback.jpg,图片放在当前FXML文件路径下。 ImageView类用来显示图片。
Label类有一个文本属性来自资源 loginExample。在 FXML中,资源名称使用%来指定。加载时, FXML 加载器使用 loginExample
的值Login Example来取代它。
FXML定义风格时很像setStyle()方法的CSS风格。 在
中 Label类使用
标签来设置字型为normal,字体是Tahoma,字号是20。
另一种定义风格的方法和Java一样,加载样式表。使用样式表的话对于以后修改比较方便。看本文的
了解相关信息。
添加网格布局和控件
下面在边框布局的中部添加网格布局。使用网格布局可以在屏幕上垂直和水平的放置控件。见
Figure 5 Grid Pane in Center Region of Border Pane
是网格布局的代码,放在 &center& 和
Example 8 Grid Layout with Controls
&GridPane alignment="top_center" hgap="8" vgap="8"
style="-fx-padding: 40 0 0 0"&
&children&
&Label text="%signIn"
style="-fx-font: NORMAL 14 T"
GridPane.columnIndex="0" GridPane.rowIndex="0"/&
&Label text="%userName"
GridPane.columnIndex="0" GridPane.rowIndex="1"
labelFor="$usernameField"/&
&TextField fx:id="usernameField" prefColumnCount="10"
GridPane.columnIndex="1" GridPane.rowIndex="1"/&
&Label text="%password"
GridPane.columnIndex="0" GridPane.rowIndex="2"
labelFor="$passwordField"/&
&PasswordField fx:id="passwordField" prefColumnCount="10"
GridPane.columnIndex="1" GridPane.rowIndex="2"
onAction="#handlePasswordFieldAction"/&
&Button fx:id="submitButton" text="%submit"
GridPane.columnIndex="1" GridPane.rowIndex="3"
onAction="#handleSubmitButtonAction"/&
&Label fx:id="buttonStatusText"
GridPane.columnIndex="1" GridPane.rowIndex="4"
style="-fx-text-fill: #ff0000;"/&
&/children&
&/GridPane&
应该对这些代码很熟悉了吧,不过还是要解释某些属性。GridPane.columnIndex
GridPane.rowIndex属性对应GridPane类的 setColumnIndex()
和setRowIndex()
方法。行列的值在网格开始时是0。比如,第一个Label控件的坐标是 (0,0)表示它在第一行第一列。或者说左上角。prefColumnCount 用于
TextField 和
PasswordField控件,来设置首选列宽是10 .
元素的fx:id属性会在文档的命名空间中创建一个变量,可以在后面引用。变量引用时使用
$来标识。在
TextField的ID是 usernameField
.该ID分配给Label控件的labelFor属性, 为
TextField控件添加了一个label.
PasswordField和
Button控件有一个 onAction属性。该符号引用一个定制化方法,会在后面创建 FXMLExampleController类时创建。
尽管FXML创建界面很方便,但却不能实现行为。行为必须用Java代码实现(下一节)或者使用脚本,见
添加按钮事件
现在创建控制器来管理按钮事件。本例演示如何把FXML和Java代码编写的事件控制器相关联。
在Projects窗口,右击 Sample.java,选择 Refactor--
输入FXMLExampleController后点击Refactor
打开FXMLExampleController.java删除代码,用下面的代替
Example 9 FXMLExampleController.java
import javafx.event.ActionE
import javafx.fxml.FXML;
import javafx.scene.control.L
public class FXMLExampleController {
@FXML private Label buttonStatusT
@FXML protected void handleSubmitButtonAction(ActionEvent event) {
buttonStatusText.setText("Submit button pressed");
@FXML protected void handlePasswordFieldAction(ActionEvent event) {
buttonStatusText.setText("Enter key pressed");
@FXML注解用来标识非公开控制器成员和方法。
作为Java的补充,也可以使用其他编译型语言如Scala来实现控制器。.
现在可以运行了。输入内容点击Submit试试。
想要完整代码,请下载
使用脚本语言
除了使用Java创建控制器,可以使用任何提供JSR223-可编译脚本引擎的语言。比如 JavaScript, Groovy, Jython, 还有Clojure.下面是用 JavaScript编码FXML的。
在fxml_example.fxml文件中,添加JavaScript声明到XML声明后。
&?language javascript?&
在 Button标记中,改变方法名称 :
onAction="handleSubmitButtonAction(event);"
更新标记PasswordField :
onAction="handlePasswordFieldAction(event);"
移除fx:controller 从
BorderPane标记中,在
&script&中添加js方法 ,见
Example 10 JavaScript in FXML
&BorderPane xmlns:fx="/fxml"&
&fx:script&
function handleSubmitButtonAction() {
buttonStatusText.setText("Calling the JavaScript");
function handlePasswordFieldAction(event) {
buttonStatusText.text = "More JavaScript";
&/fx:script&
当然也可以把js方法写进外部文件 (比如 fxml_example.js)然后像下面这样引用:
&fx:script source="fxml_example.js"/&
使用脚本编写FXML,调试时可能不会步入函数体。
使用样式表
使用内联样式,也可以添加样式表然后为结点设置关联。下面创建了样式表来定义网格布局和标签控件的样式。
创建样式表.
在Projects窗口,右击fxmlexample文件夹,选择New -- Other
在 New File对话框中,选择Other -- Cascading Style Sheet
输入 fxmlstylesheet后点击Finish
用下面的代码代替原来的代码
Example 11 Contents of Style Sheet
@charset "utf-8";
: FXMLstylesheet.css
.grid-pane {
-fx-padding: 80 0 0 0;
-fx-font: normal 36px T
打开 FXMLExample.java,把样式表加入到下面代码前面 s tage.show()
.scene.getStylesheets().add("fxmlexample/fxmlstylesheet.css");
打开 fxml_example.fxml添加样式类.
为&String&元素添加导入语句。
&?import java.lang.*?&
用下面代码代替GridPane
Example 12 Style Class for Grid Pane
&GridPane alignment="top_center" hgap="8" vgap="8"&
&styleClass&
&String fx:value="grid-pane"/&
&/styleClass&
用下面代码代替"Sign In" Label 。
Example 13
Style class for Label
&Label text="%signIn"
GridPane.columnIndex="0" GridPane.rowIndex="0"&
&styleClass&
&String fx:value="label"/&
&/styleClass&
使用&styleClass& 标签时,风格会应用到所有的类,除非它有自己的内联风格。所以
中的更改不仅应用到了 Sign In标签,也赋予了Username 和Password标签。但不会应用到Login Example标签,因为它有自己的内联样式,覆盖了其他风格。
thank& you& .最近也在学 希望可以交流一下。这一系列文章很久了,我以为现在没人搞FX了。怎么想学这个呢?
可以看看www.javafxchina.net,其中有javafx的中文资料,而且还在不断更新中嗯 不错。我这个是2011年写的,应该有些过时了
nizhenyuan 写道你好!最近在学习javaFX2.0,但由于国内的这方面的资料较少,想请教一下,javaFX2.0的好的学习路线,多谢~感谢你的阅读和回复。其实我并不是特别了解JavaFX,只是看到国内资料少就帮大家翻译了一些。其实我觉得,官网的这些资料差的远了,目前最好的方法是研读sample中的例子源码。我也觉得不是太够,想把javaFX应用显示到web页面上,比如jsp研究了好长时间都没能成功,希望能得到您的帮助啊。。。
你好!最近在学习javaFX2.0,但由于国内的这方面的资料较少,想请教一下,javaFX2.0的好的学习路线,多谢~感谢你的阅读和回复。其实我并不是特别了解JavaFX,只是看到国内资料少就帮大家翻译了一些。其实我觉得,官网的这些资料差的远了,目前最好的方法是研读sample中的例子源码。
somefuture
浏览: 244378 次
来自: 上海
我用的比较传统的方法,就是写一个supportDao的类,把基 ...
spiniper 写道说实话,spring-data并不是很好 ...
说实话,spring-data并不是很好用,我不喜欢碰到一个功 ...
qindongliang1922 写道写的不错,清晰易懂!谢谢 ...
写的不错,清晰易懂!javafx常用知识点_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
javafx常用知识点
上传于||文档简介
&&j​a​v​a​f​x​常​用​知​识​点
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
你可能喜欢Java FX2(27)
Rectangle2D primaryScreenBounds = Screen.getPrimary().getVisualBounds();
stage.setX(primaryScreenBounds.getMinX());
stage.setY(primaryScreenBounds.getMinY());
stage.setWidth(primaryScreenBounds.getWidth());
stage.setHeight(primaryScreenBounds.getHeight());
stage.setAlwaysOnTop(true);
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:53031次
积分:1280
积分:1280
排名:千里之外
原创:78篇
评论:18条
(9)(2)(5)(3)(8)(8)(5)(5)(1)(2)(2)(2)(2)(6)(1)(2)(1)(1)(1)(1)(1)(1)(3)(6)(4)(2)javaFX中的Stage窗口如何最大化、最小化
&来源:读书人网&【读书人网():综合教育门户网站】
javaFX中的Stage窗口怎么最大化、最小化?javaFX中的Stage窗口怎么使用程序而不是用户操作界面最大化/最小化
javaFX中的Stage窗口怎么最大化、最小化?javaFX中的Stage窗口怎么使用程序而不是用户操作界面最大化/最小化?stage.getEventDispatcher().dispatchEvent();事件类型没找到最大化/最小化的事件!
[解决办法]不过还是给你做了个。。/**&*&Define&a&"Close"&button,&which&is&indispensable&for&an&undecorated&stage&*&&*&@return&a&"Close"&button&*/private&Node&createCloseButton()&{closeButton&=&new&Button("Close");closeButton.setId("button-close");closeButton.setOnAction(new&EventHandler&ActionEvent&()&{@Overridepublic&void&handle(ActionEvent&event)&{Platform.exit();}});return&closeB}/**&*&Define&a&"Maximize"&button&*&&*&@return&a&"Maximize"&button&*/private&Node&createMaximizeButton()&{Button&maximizeButton&=&new&Button("Maximize");maximizeButton.setId("button-maximize");maximizeButton.setOnAction(new&EventHandler&ActionEvent&()&{@Overridepublic&void&handle(ActionEvent&event)&{/*&Toggle&the&maximizing&action&*/toggleMaximized(applicationStage);}});return&maximizeB}/**&*&Toggle&the&maximized&action.&*&&*&@param&primaryStage&*&&&&&&&&&&&&-&the&primary&stage&*/private&void&toggleMaximized(Stage&primaryStage)&{ObservableList&Screen&&screens&=&Screen.getScreensForRectangle(primaryStage.getX(),&primaryStage.getY(),&1,&1);if&(screens.isEmpty())&{screen&=&Screen.getScreensForRectangle(0,&0,&1,&1).get(0);}&else&{screen&=&screens.get(0);}if&(maximized.get())&{maximized.set(false);if&(backupWindowBounds&!=&null)&{minimizeButton.setStyle("-fx-background-insets:&0&0&-1&0,&0,&1,&2;&"&+&"-fx-background-color:&-fx-shadow-highlight-color,&"+&"-fx-outer-border,&-fx-inner-border,&-fx-body-");closeButton.setStyle("-fx-background-insets:&0&0&-1&0,&0,&1,&2;"&+&"-fx-background-color:&-fx-shadow-highlight-color,&"+&"-fx-outer-border,&-fx-inner-border,&-fx-body-");primaryStage.setX(backupWindowBounds.get().getMinX());primaryStage.setY(backupWindowBounds.get().getMinY());primaryStage.setWidth(backupWindowBounds.get().getWidth());primaryStage.setHeight(backupWindowBounds.get().getHeight());}}&else&{maximized.set(true);minimizeButton.setStyle("-fx-background-insets:&-1.4,&0,&1,&2;&"&+&"-fx-background-color:&transparent,&-fx-outer-border,&"+&"-fx-inner-border,&-fx-body-");closeButton.setStyle("-fx-background-insets:&-1.4,&0,&1,&2;&"&+&"-fx-background-color:&transparent,&-fx-outer-border,&"+&"-fx-inner-border,&-fx-body-");backupWindowBounds.set(new&Rectangle2D(primaryStage.getX(),&primaryStage.getY(),&primaryStage.getWidth(),&primaryStage.getHeight()));primaryStage.setX(screen.getVisualBounds().getMinX()&-&20);primaryStage.setY(screen.getVisualBounds().getMinY()&-&10);primaryStage.setWidth(screen.getVisualBounds().getWidth()&+&40);primaryStage.setHeight(screen.getVisualBounds().getHeight()&+&30);}}/**&*&Define&a&"Minimize"&button&*&&*&@return&a&"Minimize"&button&*/private&Node&createMinimizeButton()&{minimizeButton&=&new&Button("Minimize");minimizeButton.setId("button-minimize");minimizeButton.setOnAction(new&EventHandler&ActionEvent&()&{@Overridepublic&void&handle(ActionEvent&event)&{applicationStage.setIconified(true);}});return&minimizeB}/**&*&Enable&the&root&node&to&be&dragged.&Realize&some&drag&functions.&*&&*&@param&root&*&&&&&&&&&&&&-&the&root&node
&*/private&void&enableDragging(final&AnchorPane&root)&{/*&*&This&mouse&event&is&for&resizing&window.&Define&some&specific&cursor&patterns.&*/root.setOnMouseMoved(new&EventHandler&MouseEvent&()&{@Overridepublic&void&handle(MouseEvent&me)&{if&(me.getX()&&&root.getWidth()&-&10&&&&me.getX()&&&root.getWidth()&+&10&&&&me.getY()&&&root.getHeight()&-&10&&&me.getY()&&&root.getHeight()&+&10)&{root.setCursor(Cursor.SE_RESIZE);}&else&if&(me.getX()&&&root.getWidth()&-&5&&&&me.getX()&&&root.getWidth()&+&5)&{root.setCursor(Cursor.H_RESIZE);}&else&if&(me.getY()&&&root.getHeight()&-&5&&&&me.getY()&&&root.getHeight()&+&5)&{root.setCursor(Cursor.V_RESIZE);}&else&{root.setCursor(Cursor.DEFAULT);}}});/*&when&mouse&button&is&pressed,&save&the&initial&position&of&screen.&*/root.setOnMousePressed(new&EventHandler&MouseEvent&()&{@Overridepublic&void&handle(MouseEvent&me)&{Window&primaryStage&=&root.getScene().getWindow();anchor.set(new&Point2D(me.getScreenX()&-&primaryStage.getX(),&me.getScreenY()&-&primaryStage.getY()));widthStage.set(primaryStage.getWidth());heightStage.set(primaryStage.getHeight());}});/*&*&when&mouse&button&is&released,&clear&the&initial&position&of&screen.&This&action&is&very&important,&because&it&can&be&a&judge&to&avoid&*&mouse&interaction&with&other&nodes&as&ChoiceBox.&*/root.setOnMouseReleased(new&EventHandler&MouseEvent&()&{@Overridepublic&void&handle(MouseEvent&me)&{anchor.set(null);}});/*&*&when&screen&is&dragged,&translate&it&accordingly.&Note&that&the&transparent&pixels&part&contained&in&the&root&will&not&react&to&the&drag.&*&But&translucent&color&is&able&to.&*/root.setOnMouseDragged(new&EventHandler&MouseEvent&()&{@Overridepublic&void&handle(MouseEvent&me)&{if&(anchor.get()&!=&null)&{/*&The&drag&event&on&the&root&really&takes&place.&*/drag(me,&root);}}});}/**&*&Drag&the&primary&stage.&*&&*&@param&me&*&&&&&&&&&&&&-&the&mouse&event&*&@param&root&*&&&&&&&&&&&&-&the&root&node&of&stage&*/private&void&drag(MouseEvent&me,&Node&root)&{Window&primaryStage&=&root.getScene().getWindow();if&(root.getCursor()&==&Cursor.H_RESIZE)&{setWidth(me,&primaryStage);}&else&if&(root.getCursor()&==&Cursor.V_RESIZE)&{setHeight(me,&primaryStage);}&else&if&(root.getCursor()&==&Cursor.SE_RESIZE)&{setWidth(me,&primaryStage);setHeight(me,&primaryStage);}&else&{/*&moving&the&stage&*/moveStage(me,&primaryStage);}}/**&*&Set&the&stage&width.&*&&*&@param&me&*&&&&&&&&&&&&-&the&mouse&event&*&@param&primaryStage&*&&&&&&&&&&&&-&the&primary&stage&*/private&void&setWidth(MouseEvent&me,&Window&primaryStage)&{double&stageMinWidth&=&600;primaryStage.setWidth(Math.max(stageMinWidth,&widthStage.get()&+&(me.getScreenX()&-&(anchor.get().getX()&+&primaryStage.getX()))));}/**&*&Set&the&stage&height.&*&&*&@param&me&*&&&&&&&&&&&&-&the&mouse&event&*&@param&primaryStage&*&&&&&&&&&&&&-&the&primary&stage&*/private&void&setHeight(MouseEvent&me,&Window&primaryStage)&{double&stageMinHeight&=&400;primaryStage.setHeight(Math.max(stageMinHeight,&heightStage.get()&+&(me.getScreenY()&-&(anchor.get().getY()&+&primaryStage.getY()))));}/**&*&Move&the&stage.
&*&&*&@param&me&*&&&&&&&&&&&&-&the&mouse&event&*&@param&primaryStage&*&&&&&&&&&&&&-&the&primary&stage&*/private&void&moveStage(MouseEvent&me,&Window&primaryStage)&{if&(maximized.get())&{anchor.set(new&Point2D(((me.getScreenX()&-&primaryStage.getX())&/&primaryStage.getWidth())&*&backupWindowBounds.get().getWidth(),&me.getScreenY()&-&screen.getVisualBounds().getMinY()));primaryStage.setWidth(backupWindowBounds.get().getWidth());primaryStage.setHeight(backupWindowBounds.get().getHeight());maximized.set(false);}primaryStage.setX(me.getScreenX()&-&anchor.get().getX());primaryStage.setY(me.getScreenY()&-&anchor.get().getY());}[解决办法]引用:javaFX中的Stage窗口怎么使用程序而不是用户操作界面最大化/最小化?stage.getEventDispatcher().dispatchEvent();事件类型没找到最大化/最小化的事件!不过你说的“stage.getEventDispatcher().dispatchEvent();事件类型没找到最大化/最小化的事件!”是语法上行不通的,你要派发事件,那么首先要生成你想要的事件,例如:changeButton.dispatchEvent(new&MouseEvent(component,&e.getID(),&e.getWhen(),&e.getModifiers(),&componentPoint.x,componentPoint.y,&e.getClickCount(),&e.isPopupTrigger()));一个最直接办法是利用Robot仿真模拟动作。[解决办法]引用:Quote: 引用:Quote: 引用:javaFX中的Stage窗口怎么使用程序而不是用户操作界面最大化/最小化?stage.getEventDispatcher().dispatchEvent();事件类型没找到最大化/最小化的事件!不过你说的“stage.getEventDispatcher().dispatchEvent();事件类型没找到最大化/最小化的事件!”是语法上行不通的,你要派发事件,那么首先要生成你想要的事件,例如:changeButton.dispatchEvent(new&MouseEvent(component,&e.getID(),&e.getWhen(),&e.getModifiers(),&componentPoint.x,componentPoint.y,&e.getClickCount(),&e.isPopupTrigger()));一个最直接办法是利用Robot仿真模拟动作。fireEvent方法不行吗?行啊,但是你要fire哪个e呢,得new&一个event[解决办法]引用:Quote: 引用:Quote: 引用:Quote: 引用:Quote: 引用:javaFX中的Stage窗口怎么使用程序而不是用户操作界面最大化/最小化?stage.getEventDispatcher().dispatchEvent();事件类型没找到最大化/最小化的事件!不过你说的“stage.getEventDispatcher().dispatchEvent();事件类型没找到最大化/最小化的事件!”是语法上行不通的,你要派发事件,那么首先要生成你想要的事件,例如:changeButton.dispatchEvent(new&MouseEvent(component,&e.getID(),&e.getWhen(),&e.getModifiers(),&componentPoint.x,componentPoint.y,&e.getClickCount(),&e.isPopupTrigger()));一个最直接办法是利用Robot仿真模拟动作。fireEvent方法不行吗?行啊,但是你要fire哪个e呢,得new&一个event那个还原窗口大小的按钮是什么名字?从哪里得到?就是createMaximumButton()和createMinmumButton()[解决办法]import&javafx.application.Aimport&javafx.stage.*;import&javafx.scene.*;import&javafx.scene.layout.*;import&javafx.scene.control.*;import&javafx.event.*;public&class&CloseFXWindow&extends&Application&{&&public&static&void&main(final&String...&args)&{&&&&Application.launch(CloseFXWindow.class,&args);&&}&&@Override&public&void&start(final&Stage&stage)&{&&&&stage.setTitle("FX&Close");&&&&Button&close&=&ButtonBuilder.create().text("Close").onAction(new&EventHandler&ActionEvent&(){&&&&&&&&@Override&public&void&handle(ActionEvent&e){&&&&&&&&&&Event.fireEvent(stage,&new&WindowEvent(stage,&WindowEvent.WINDOW_CLOSE_REQUEST&));&&&&&&&&}&&&&&&}).build();&&&&Button&hidden&=&ButtonBuilder.create().text("Hidden").onAction(new&EventHandler&ActionEvent&(){&&&&&&&&&&&&@Override&public&void&handle(ActionEvent&e){&&&&&&&&&&&&&&&&stage.setIconified(true);&&&&&&&&&&&&}&&&&&&&&}).build();Button&full&=&ButtonBuilder.create().text("Full&Screen").onAction(new&EventHandler&ActionEvent&(){@Override&public&void&handle(ActionEvent&e){stage.setFullScreen(true);}}).build();&&&&Button&max&=&ButtonBuilder.create().text("Max").onAction(new&EventHandler&ActionEvent&(){&&&&&&&&&&&&@Override&public&void&handle(ActionEvent&e){
&&&&&&&&&&&&&&&&javafx.geometry.Rectangle2D&primaryScreenBounds&=&Screen.getPrimary().getVisualBounds();&&&&&&&&&&&&&&&&stage.setX(primaryScreenBounds.getMinX());&&&&&&&&&&&&&&&&stage.setY(primaryScreenBounds.getMinY());&&&&&&&&&&&&&&&&stage.setWidth(primaryScreenBounds.getWidth());&&&&&&&&&&&&&&&&stage.setHeight(primaryScreenBounds.getHeight());&&&&&&&&&&&&}&&&&&&&&}).build();VBox&vbox&=&new&VBox(8);vbox.get().addAll(close,&hidden,&max,&full);&&&&Group&root&=&new&Group(vbox);&&&&Scene&scene&=&SceneBuilder.create().root(root).width(400).height(300).build();&&&&stage.setScene(scene);&&&&stage.show();&&}}

我要回帖

更多关于 javafx 禁止最大化 的文章

 

随机推荐