JavaFX 最大化下屏幕适配

我们在做桌面应用的时候经常需要 在最大化的时候,让部分控件跟随窗口大小变化而变化。

这个时候我们需要 利用VBox 或者HBox 作为根布局,再将需要跟随屏幕子控件设置 VBox.vgrow="ALWAYS" 或者 HBox.hgrow="ALWAYS" 即可,下面以下图为例

​​​

上两张图一张是正常模式,一张是最大化下没有设置屏幕适配的状态下,特别的不美观,接下来我们设置一下,

是不是好看很多,左边的列表,和右侧的选项卡跟随了屏幕变化,但是图片中的选项卡里面的内容是不是没有跟随TabPane的大小变化而变化呢,接下来在处理TabPane 子项的屏幕填充,先看上面的布局代码

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.*?>

<?import java.lang.*?>

<?import javafx.scene.control.*?>

<?import javafx.scene.layout.*?>

<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="750.0" prefWidth="1280.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.mitcub.controller.HomeController">

      <HBox prefHeight="100.0" prefWidth="1280.0">

            <Pane layoutX="4.0" layoutY="4.0" prefHeight="100.0" prefWidth="250.0" style="-fx-border-color: #bbbbbb; -fx-border-radius: 3;">

                    <RadioButton fx:id="rb_xyft" layoutX="14.0" layoutY="10.0" mnemonicParsing="false" selected="true" text="幸运飞艇" />

                    <RadioButton fx:id="rb_azxy" layoutX="14.0" layoutY="35.0" mnemonicParsing="false" text="澳洲幸运" />

                    <RadioButton fx:id="rb_sgft" layoutX="14.0" layoutY="60.0" mnemonicParsing="false" text="SG飞艇" />

                    <RadioButton fx:id="rb_jsssc" layoutX="134.0" layoutY="60.0" mnemonicParsing="false" text="极速时时彩" />

                    <RadioButton fx:id="rb_jsft" layoutX="134.0" layoutY="35.0" mnemonicParsing="false" text="极速飞艇" />

                    <RadioButton fx:id="rb_jssc" layoutX="134.0" layoutY="10.0" mnemonicParsing="false" text="极速赛车" />

      <HBox fx:id="hb_bottom" nodeOrientation="LEFT_TO_RIGHT" prefHeight="600.0" prefWidth="1280.0" VBox.vgrow="ALWAYS">

            <TableView fx:id="recordTableView" layoutX="0.0" layoutY="0.0" prefHeight="615.0" prefWidth="250.0">

                    <TableColumn fx:id="timeColum" prefWidth="45.0" text="时间" />

                    <TableColumn fx:id="issueColum" prefWidth="80.0" text="期数" />

                    <TableColumn fx:id="codeColum" prefWidth="200.0" text="开奖号码" />

            <TabPane fx:id="tabPane" layoutX="275.0" layoutY="110.0" prefHeight="615.0" prefWidth="1020.0" style="-fx-border-color: #bbbbbb;" tabClosingPolicy="UNAVAILABLE" HBox.hgrow="ALWAYS">

                    <Tab id="setTabPage" closable="false" text="算法设置">

                            <fx:include  source="settingView2.fxml" />

                    <Tab id="hisTabPage" closable="false" text="历史数据演算">

                            <fx:include  source="historyView.fxml" />

                  <Insets left="5.0" />

            <Insets top="5.0" />

      <HBox prefHeight="35.0" prefWidth="1280.0" style="-fx-background-color: #f9f9f9;">

            <Insets top="3.0" />

            <Label text="版本V1.0.0" />

            <Insets left="30.0" top="10.0" />


下面我们来处理 选项卡里面的内容撑开,看上图的选项卡中,感觉是没有被撑开,子项中的背景色设置成了橘黄色,这是因为创建fmxl的时候,默认给根布局设置了 maxHeight="-Infinity" maxWidth="-Infinity" 只要将子项的根下的这行去掉即可,接下来看效果

这样是不是好看很多的,跟最开始的效果比起来是不是会好很多,跟初始状态比较,是不是更可以接受一些了,当然还可以继续优化。JavaFX 屏幕最大化适配先写到这里。代码附上

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>

<?import javafx.scene.control.*?>

<?import javafx.scene.layout.*?>

<VBox fx:id="vbox_root"  minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="1020.0" style="-fx-background-color: ff6600;" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.mitcub.view.SettingView">

      <HBox prefHeight="211.0" prefWidth="1020.0">

            <Pane prefHeight="211.0" prefWidth="257.0">

                  <Button fx:id="btn_start" layoutX="20.0" layoutY="171.0" mnemonicParsing="false" onAction="#startClick" prefHeight="29.0" prefWidth="60.0" text="开始" />

                  <Button fx:id="btn_pause" layoutX="95.0" layoutY="171.0" mnemonicParsing="false" onAction="#pauseClick" prefHeight="29.0" prefWidth="60.0" text="暂停" />

                  <Button fx:id="btn_stop" layoutX="173.0" layoutY="171.0" mnemonicParsing="false" onAction="#stopClick" prefHeight="29.0" prefWidth="60.0" text="停止" />

                  <CheckBox fx:id="cb_win" layoutX="20.0" layoutY="20.0" mnemonicParsing="false" text="盈利超过" />

                  <CheckBox fx:id="cb_lose" layoutX="20.0" layoutY="51.0" mnemonicParsing="false" text="盈利低于" />

                  <TextField fx:id="tv_win" layoutX="95.0" layoutY="17.0" prefHeight="23.0" prefWidth="77.0" />

                  <TextField fx:id="tv_lose" layoutX="95.0" layoutY="49.0" prefHeight="23.0" prefWidth="77.0" />

                  <Label layoutX="188.0" layoutY="21.0" text="停止挂机" />

                  <Label layoutX="188.0" layoutY="53.0" text="停止挂机" />

                  <Label layoutX="20.0" layoutY="91.0" prefHeight="15.0" prefWidth="207.0" text="今日盈利:0.00" textFill="#ff4d4d" />

                  <Label layoutX="20.0" layoutY="125.0" text="延时下注" />

                  <TextField fx:id="tv_delaybet" layoutX="80.0" layoutY="121.0" prefHeight="23.0" prefWidth="48.0" />

                  <Label layoutX="141.0" layoutY="125.0" text="(0-60秒)" />

            <Pane prefHeight="200.0" prefWidth="600.0">

                  <CheckBox fx:id="cb_num1" layoutX="20.0" layoutY="10.0" mnemonicParsing="false" text="1" />

                  <CheckBox fx:id="cb_num2" layoutX="20.0" layoutY="45.0" mnemonicParsing="false" text="2" />

                  <CheckBox fx:id="cb_num3" layoutX="20.0" layoutY="80.0" mnemonicParsing="false" text="3" />

                  <CheckBox fx:id="cb_num4" layoutX="20.0" layoutY="115.0" mnemonicParsing="false" text="4" />

                  <CheckBox fx:id="cb_num5" layoutX="20.0" layoutY="150.0" mnemonicParsing="false" text="5" />

                  <CheckBox fx:id="cb_num6" layoutX="255.0" layoutY="10.0" mnemonicParsing="false" text="6" />

                  <CheckBox fx:id="cb_num7" layoutX="255.0" layoutY="45.0" mnemonicParsing="false" text="7" />

                  <CheckBox fx:id="cb_num8" layoutX="255.0" layoutY="80.0" mnemonicParsing="false" text="8" />

                  <CheckBox fx:id="cb_num9" layoutX="255.0" layoutY="115.0" mnemonicParsing="false" text="9" />

                  <CheckBox fx:id="cb_num10" layoutX="255.0" layoutY="150.0" mnemonicParsing="false" text="10" />

                  <TextField fx:id="tv_num1" layoutX="60.0" layoutY="8.0" />

                  <TextField fx:id="tv_num2" layoutX="60.0" layoutY="43.0" />

                  <TextField fx:id="tv_num3" layoutX="60.0" layoutY="78.0" />

                  <TextField fx:id="tv_num4" layoutX="60.0" layoutY="113.0" />

                  <TextField fx:id="tv_num5" layoutX="60.0" layoutY="148.0" />

                  <TextField fx:id="tv_num6" layoutX="300.0" layoutY="8.0" />

                  <TextField fx:id="tv_num7" layoutX="300.0" layoutY="43.0" />

                  <TextField fx:id="tv_num8" layoutX="300.0" layoutY="78.0" />

                  <TextField fx:id="tv_num9" layoutX="300.0" layoutY="112.0" />

                  <TextField fx:id="tv_num10" layoutX="300.0" layoutY="148.0" />

                  <Label layoutX="20.0" layoutY="185.0" text="金额" />

                  <TextField fx:id="tv_jine" layoutX="52.0" layoutY="182.0" prefHeight="23.0" prefWidth="290.0" />

                  <CheckBox fx:id="cb_zfb" layoutX="350.0" layoutY="185.0" mnemonicParsing="false" text="选中后中奖翻倍" />

      <TableView fx:id="table_bet" layoutX="7.0" layoutY="219.0" prefHeight="384.0" prefWidth="1008.0" VBox.vgrow="ALWAYS">

              <TableColumn prefWidth="100.0" text="下注期号" />

              <TableColumn prefWidth="150.0" text="开奖号码" />

              <TableColumn prefWidth="150.0" text="每列倍率" />

              <TableColumn prefWidth="50.0" text="笔数" />

              <TableColumn prefWidth="60.0" text="总金额" />

              <TableColumn prefWidth="80.0" text="下注结果" />

              <TableColumn prefWidth="300.0" text="下注记录" />

              <TableColumn prefWidth="300.0" text="上期备注" />

              <TableColumn prefWidth="100.0" text="翻倍" />

   至于为什么选择JavaFX做桌面软件,因为平时用java用的多web ,安卓都在用java,但是java写桌面体验太差了,之前一直用arrdio这个小工具在写桌面程序,这个小软件,开发快,布局拖拽 对齐 方便快捷,桌面应用的首选,缺点就是比较小众,可借鉴的文章不多,C#呢,也不是没考虑过,玩了一阵子感觉没兴趣了,哈哈,至于为什么选JavaFX,一来是学习,而来是arrdio的网络库inet.whttp 模拟提交数据的时候,经常会因为服务器更改了之后造成需要更改头部(header),貌似java用okhttp,就没那么多问题了,强大的okhttp,哈哈,最近也是抱着学习的态度,拿这个之前写的小软件练练手。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,928评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,748评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,282评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,065评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,101评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,855评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,521评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,414评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,931评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,053评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,191评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,873评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,529评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,074评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,188评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,491评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,173评论 2 357