JAVA - FX基础

JavaFX 基本介绍
JavaFX 是用于构建富互联网应用程序的 Java 库。 使用此库编写的应用程序可以跨多个平台一致运行。
使用 JavaFX 开发的应用程序可以在各种设备上运行,如台式计算机,手机,电视,平板电脑等。
要使用 Java 编程语言开发 GUI 应用程序,程序员依赖于诸如高级窗口工具包 (AWT) 和 Swings 之类的库。
在 JavaFX 出现之后,这些 Java 程序开发就可以有效地利用丰富的类库来开发 GUI 应用程序。
代码介绍
Application 是 JavaFX 程序的入口 , 任何 JavaFX 应用程序程序都要继承该类并重写 start() 方法
通过 main() 执行 Application 的 launch() 方法
launch 方法会默认执行该类下的 init() 、 start() 、 stop() 方法
方法执行后的显示顺序为:
init() 方法 ➡ start() 方法 ➡ stop() 方法
public class Main extends Application {
@Override
public void start ( Stage primaryStage ) {
}
public static void main ( String [] args ) {
launch ( args );
}
}
@Override
public void init () throws Exception {
super . init ();
}
@Override
public void start ( Stage primaryStage ) {
}
@Override
public void stop () throws Exception { 当 start 方法中没写内容的时候 , 运行时是没有效果的 , 所以需要添加以下代码 :
方法中的参数 primaryStage 表示的就是当前该程序的舞台对象。
一定要记得添加 primaryStage.show() , 不然运行完成之后是没效果的 , 然后就会怀疑自己代码写错了 🙆‍♂️
整体结构
Stage 是一个主容器 , 或者说是 舞台 , 它就是我们通常所认为的窗口(有边 , 高和宽 , 还有关闭按钮)。在舞台里面 , 我们可以放置一
个 Scene 也就是 场景 , 我们可以把 Scene 理解为子容器 , 当然你可以切换别的 Scene , 而在这个 Scene 里面 , 我们就可以放置各种
各样的控件。
场景面板介绍
布局面板需要和场景搭配使用 , 如果我们需要将内容显示出来 , 就需要将内容放到布局对象中 , 同时也还需要将该布局面板与一个场
景绑定在一起 , 再把场景绑定到舞台中 , 就完成显示了。
舞台( Stage )包含 场景( Scene ) , 场景与布局绑定 , 布局中可以放入多个控件
FlowPane 流式布局
FlowPane 它会在一行上排列连续的子组件 , 并且如果当前行填满了以后 , 则自动将子组件向下推到下一行。
super . stop ();
}
@Override
public void start ( Stage primaryStage ) throws IOException {
primaryStage . setTitle ( " 我的 fx 窗口标题 " ); // 设置当前的窗口标题
primaryStage . show (); // 让当前的窗口显示
}
FlowPane flowPane = new FlowPane (); 构建了布局之后 , 我们可以往里面放入对应的组件。
需要注意的是 , 该布局中可以放入任意多个控件 , 所以该布局内部使用了 List 集合来存放多个控件。
flowPane . getChildren () // 子元素集合 , 这是一个 List 集合 , 其中存放了该布局下所有的控件
如果想要把一个控件给到该布局 , 简单来说就是将控件加入该子元素集合:
// 构建布局
FlowPane flowPane = new FlowPane ();
// 构建控件
Button l1 = new Button ( " 按钮一 " );
Button l2 = new Button ( " 按钮二 " );
Button l3 = new Button ( " 按钮三 " );
Button l4 = new Button ( " 按钮四 " );
Button l5 = new Button ( " 按钮五 " );
// 将控件添加到该布局的子元素集合中
flowPane . getChildren (). add ( l1 );
flowPane . getChildren (). add ( l2 );
flowPane . getChildren (). add ( l3 );
flowPane . getChildren (). add ( l4 );
flowPane . getChildren (). add ( l5 );
当控件填充完成之后 , 根据之前所述 , 我们需要将该布局与场景 Scene 进行绑定
Scene scene = new Scene ( flowPane , 300 , 300 );
// 以 flowPane 布局创建一个场景 , 大小是 300*300
同时 , 需要将场景与主容器进行绑定 , 才能完成显示
primaryStage . setScene ( scene );
可以通过拉动窗口大小观察的布局的变化
完整代码如下:
@Override
public void start ( Stage primaryStage ) throws IOException {
// 新建布局
FlowPane flowPane = new FlowPane (); BorderPane 边框布局
该布局有顶部 , 底部 , 左 , 右与中心区域的五个区域 , 每个区域只能有一个节点。
该布局有 5 个区域可以放入控件 , 所以放入控件的时候需要指定应放在该布局的什么位置:
我们放入 5 个按钮到对应的位置 :
// 新建文本标签控件
Button l1 = new Button ( " 按钮一 " );
Button l2 = new Button ( " 按钮二 " );
Button l3 = new Button ( " 按钮三 " );
Button l4 = new Button ( " 按钮四 " );
Button l5 = new Button ( " 按钮五 " );
// 将文本标签控件绑定到布局中
flowPane . getChildren (). add ( l1 );
flowPane . getChildren (). add ( l2 );
flowPane . getChildren (). add ( l3 );
flowPane . getChildren (). add ( l4 );
flowPane . getChildren (). add ( l5 );
// 生成场景并完成布局绑定 , 同时设定场景大小
Scene scene = new Scene ( flowPane , 200 , 300 );
// 主容器标题设置
primaryStage . setTitle ( "fx" );
// 给主容器绑定场景(让场景显示出来)
primaryStage . setScene ( scene );
// 不要忘了这一行 , 让主容器显示
primaryStage . show ();
}
BorderPane borderPane = new BorderPane ();
borderPane . setCenter (); // 中央区域
borderPane . setBottom (); // 下方
borderPane . setTop (); // 上方
borderPane . setLeft (); // 左方
borderPane . setRight (); // 右边
// 新建布局
BorderPane borderPane = new BorderPane (); 控件介绍
注意:组件都在 javafx.scene.control 包里面 , 切记不要导错包
Label 文本标签
TextField 输入框
// 新建控件
Button b1 = new Button ( " 中间 " );
Button b2 = new Button ( " 下面 " );
Button b3 = new Button ( " 上面 " );
Button b4 = new Button ( " 左边 " );
Button b5 = new Button ( " 右边 " );
// 将控件放入布局对应位置
borderPane . setCenter ( b1 );
borderPane . setBottom ( b2 );
borderPane . setTop ( b3 );
borderPane . setLeft ( b4 );
borderPane . setRight ( b5 );
// 为布局生成场景
Scene scene = new Scene ( borderPane , 300 , 300 );
// 将场景绑定到主容器
stage . setScene ( scene );
// 让主容器显示
stage . show ();
Label label = new Label ( " 我是标签文本 " );
TextField textField = new TextField ( " 请输入你的用户名 " ); PasswordField 密码框
Button 按钮
对于以上这些控件 :
1. 可以通过 setText(string) 设置控件的文本内容
2. 可以通过 getText() 获得控件中的文本内容
按钮的点击事件
通过按钮的 setOnAction 方法可以设置按钮的点击操作 , 该方法需要一个 EventHandler
PasswordField passwordField = new PasswordField ();
Button button = new Button ( " 我是一个按钮 " );
Button button = new Button ();
button . setText ( "( •̀
ω •́
) ✧ " ); 因为此处是属于 函数式接口 @FunctionalInterface , 所以建议使用 lambda 表达式来编写
案例制作
使用流式布局制作一个登录界面 , 并完成数据库查询
新建布局
控件创建与分析
@FunctionalInterface
public interface EventHandler<T extends Event> extends EventListener {
void handle(T var1);
}
Button button = new Button ( " 点我 ( ● ˇ ∀ ˇ ● )" );
//lamdba 表达式 , 同学们需要习惯一下
button . setOnAction ( e -> {
System . out . println ( " 我被点击了 " );
});
// 非 lambda 表达式 , 写法比较复杂
button . setOnAction ( new EventHandler < ActionEvent > () {
@Override
public void handle ( ActionEvent actionEvent ) {
System . out . println ( " 我被点击了 " );
}
});
FlowPane flowPane = new FlowPane ();
// 新建输入框
TextField name = new TextField ( " 请输入用户名 " );
// 新建文本标签:用户密码
Label l2 = new Label ( " 用户密码 " );
// 新建密码框
PasswordField pwd = new PasswordField ();
// 登录按钮的创建
Button login = new Button ( " 登录 " ); 控件绑定
场景绑定
舞台设置
登录事件
优化:引入弹出框
flowPane . getChildren (). addAll ( l1 , name , l2 , pwd , login );
// 相当于调用了多次 add 方法 , 比较简便 , 但是需要注意顺序
Scene scene = new Scene ( flowPane , 230 , 100 );
primaryStage . setTitle ( " 登录 " );
// 给主容器绑定场景(让场景显示出来)
primaryStage . setScene ( scene );
// 不要忘了这一行 , 让主容器显示
primaryStage . show ();
login . setOnAction ( e -> {
String username = name . getText ();
String password = pwd . getText ();
// 带入到 dao 层 进行查询
User user = userDao . login ( username , password );
// 判断是否找到该用户
if ( user != null ){
System . out . println ( " 登录成功 " );
} else {
System . out . println ( " 登陆失败 , 请检查 " );
}
});
// 定义弹出框对象
Alert alert = new Alert ( Alert . AlertType . ERROR , " 登陆失败 " );
// 调用弹出框的显示方法
alert . showAndWait (); AlertType
NONE
ERROR
WARNING
CONFIRMATION
INFORMATION
if ( user != null ){
new Alert ( Alert . AlertType . INFORMATION , " 登录成功 " ). showAndWait ();
} else {
new Alert ( Alert . AlertType . ERROR , " 登录失败 " ). showAndWait ();
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值