
容器的布局是指对添加的各个组件进行有序的、统一的对位置进行编排,使其更加美观。
JavaFX典型的布局策略:
1、lowPane面板
它采用的布局策略是:按照控件的添加次序按个摆放,按照从上到下、从左到右的次序摆放。当窗口的大小发生变化后,场景的大小也自动跟着变化,面板的大小也跟着变化,并且会重新计算各个控件的位置,重新摆放各个控件的位置。
2、GridPane面板
它采用的布局策略是:将整个面板划分为若干个格子,每个格子的大小是一样的,每个格子中可以放置一个控件,类似于表格的方式。
3、BorderPane面板
它采用的布局策略是:将整个面板划分五个区域,分别是上、下、左、右、中,每个区域可以放置一个控件。
4、HBox面板
HBox是将所有的控件放在同一行,无论有多少个控件都是放在同一行。
5、Box面板
VBox的布局策略与HBox类似,不过VBox是将所有的控件放在同一列。
扩展资料:
容器没有布置它自己构件的功能,而把这个责任授权给一个布局管理器。
顺序布局是最基本的一种布局,面板的默认布局就是顺序布局。顺序布局指的是把图形元件一个接一个地放在面板上。
边界布局包括5个区:北区、南区、东区、西区和中区。这5个区在面板上的分布规律是“上北下南,左西右东”。
参考资料:百度百科-java软件开发
我也遇到了这个问题,然后我显式地写了
import javafx.scene.control.Buttonimport javafx.scene.control.TextField
import javafx.scene.control.Label
就不报错了
现在创建控制器来管理按钮事件。本例演示如何把FXML和Java代码编写的事件控制器相关联。在Projects窗口,右击 Sample.java,选择 Refactor-- Rename .
输入FXMLExampleController后点击Refactor .
打开FXMLExampleController.java删除代码,用下面的代替 Example
9 .
Example 9
FXMLExampleController.java
package fxmlexample
import javafx.event.ActionEvent
import javafx.fxml.FXML
import javafx.scene.control.Label
public class FXMLExampleController {
@FXML private Label buttonStatusText
@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试试。
想要完整代码,请下载 FXMLExample.zip .
使用脚本语言
除了使用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 .
Example 10 JavaScript in FXML
<BorderPane xmlns:fx="http://javafx.com/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 , 然后 Next .
输入 fxmlstylesheet后点击Finish .
用下面的代码代替原来的代码 Example
11 .
Example 11 Contents of Style
Sheet
@charset "utf-8"
/*
Document : FXMLstylesheet.css
*/
.grid-pane {
-fx-padding: 80 0 0 0
}
.label {
-fx-font: normal 36px Tahoma
}
打开 FXMLExample.java,把样式表加入到下面代码前面 s tage.show() .scene.getStylesheets().add("fxmlexample/fxmlstylesheet.css")
打开 fxml_example.fxml添加样式类.
为<String>元素添加导入语句。
<?import java.lang.*?>
用下面代码代替GridPane Example
12 .
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 .
Example 13 Style class for
Label
<Label text="%signIn"
GridPane.columnIndex="0" GridPane.rowIndex="0">
<styleClass>
<String fx:value="label"/>
</styleClass>
</Label>
使用<styleClass>
标签时,风格会应用到所有的类,除非它有自己的内联风格。所以Example
13 中的更改不仅应用到了 Sign
In标签,也赋予了Username 和Password标签。但不会应用到Login Example标签,因为它有自己的内联样式,覆盖了其他风格。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)