一、窗体

0.class的创建

入口,比如login等,用Java application创建。其他用普通class

需要被调用的面板初始化:例如创建主页面MainPane

//新建的类extends AnchorPane
//以下都在该类里
private static MainPane mainPane;
private Stage stage;
//上面的适用于给别的类直接调用
private MainPane(){
//基础配置。可能用try catch包起来 }
public Stage getStage(){
return this.stage;
}
public static void showMainPane(String name){
mainPane = new MainPane(name);
mainPane.getStage().show(); }//别的类要开面板就静态调用这个方法就行

0.5 可能需要的入口类。导出javafx application好像需要

新建一个类

public class StartApp {
public static void main(String[] args) {
Login.main(args);//login是打算的入口
}
}

1.基础配置

 //设置fxml
FXMLLoader fx = new FXMLLoader();
AnchorPane root = (AnchorPane)fx.load(getClass().getClassLoader().getResource("login.fxml"));、
//fxml拖到src下。
//设置scene
Scene scene = new Scene(root);
scene.setFill(null);//透明
stage.setScene(scene);
//窗体设置
stage.initStyle(StageStyle.TRANSPARENT);//透明
stage.setTitle("登录");

2.窗口拖拽

//坐标
private double oldStageX;
private double oldStageY;
private double oldScreenX;
private double oldScreenY;
//窗口拖拽

Pane dragPane = new Pane();
dragPane.setLayoutX(-1.0);
dragPane.setOpacity(0.0);
dragPane.setPrefHeight(41.0);
dragPane.setPrefWidth(236.0);
root.getChildren().add(dragPane);
dragPane.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
oldStageX = stage.getX();
oldStageY = stage.getY();
oldScreenX = event.getScreenX();
oldScreenY = event.getScreenY();
}
});
dragPane.setOnMouseDragged(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
//新位置
//拖拽前后的鼠标差值加上原始窗体坐标值
stage.setX(event.getScreenX() - oldScreenX + oldStageX);
stage.setY(event.getScreenY() - oldScreenY + oldStageY);
}
});

3.关闭、最小化、最大化

//关闭按钮
Circle btn_close = new Circle();
btn_close.setLayoutX(25.0);
btn_close.setLayoutY(21.0);
btn_close.setRadius(7.0);
btn_close.setFill(Paint.valueOf("#ff481f"));
btn_close.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
stage.close();
}
});
root.getChildren().add(btn_close);
//最小化按钮
Circle btn_minimize = new Circle();
btn_minimize.setLayoutX(45.0);
btn_minimize.setLayoutY(21.0);
btn_minimize.setRadius(7.0);
btn_minimize.setFill(Paint.valueOf("orange"));
btn_minimize.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
stage.setIconified(true);
}
});
root.getChildren().add(btn_minimize);

最大化同理。

二、防止线程阻塞 好东西!

这是个好东西 多次救我 比如按回车后即使clear也会回车的问题。

Task<Void> recieveServertask = new Task<Void>() {
@Override public Void call() {
//···
Platform.runLater(() -> {
//在runlater里开防止连接时页面被阻塞
});
return null;
}
};
new Thread(recieveServertask).start();

三、导出exe 烦

1.建议用jdk1.8(java 8)。再新就导不出exe了。Oracle真的太过分啦!(

2.

png 转 ico http://pic.55.la/png2ico/

不要忘记

1.stage.show();
2.层次顺序,先创建的再下。
3.如果是较新的java,每个ui类都要配置vmoption

普通页面创建模板 直接改就行

package com.liuzhiwen.view.UIClass.server;

import com.liuzhiwen.controller.MainController;
import com.liuzhiwen.controller.client.ChatClient;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Paint;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.stage.StageStyle; import java.io.IOException; public class ServerPane extends AnchorPane { private static ServerPane serverPane;
private Stage stage; //坐标
private double oldStageX;
private double oldStageY;
private double oldScreenX;
private double oldScreenY; private ServerPane(){
try { //设置fxml FXMLLoader fx = new FXMLLoader();
AnchorPane root = (AnchorPane) fx.load(getClass().getClassLoader().getResource("serverpane.fxml"));
stage = new Stage();
//设置scene
Scene scene = new Scene(root);
scene.setFill(null);//透明
stage.setScene(scene);
//窗体设置
stage.initStyle(StageStyle.TRANSPARENT);//透明
stage.setTitle("往生堂聊天室");
stage.getIcons().add(new Image("com/liuzhiwen/img/logo.png"));
// 窗口拖拽
Pane dragPane = new Pane();
dragPane.setLayoutX(-1.0);
dragPane.setOpacity(0.0);
dragPane.setPrefHeight(41.0);
dragPane.setPrefWidth(1040.0); root.getChildren().add(dragPane);
dragPane.setOnMousePressed(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
oldStageX = stage.getX();
oldStageY = stage.getY();
oldScreenX = event.getScreenX();
oldScreenY = event.getScreenY();
}
});
dragPane.setOnMouseDragged(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
//新位置
//拖拽前后的鼠标差值加上原始窗体坐标值
stage.setX(event.getScreenX() - oldScreenX + oldStageX);
stage.setY(event.getScreenY() - oldScreenY + oldStageY);
}
});
//关闭按钮
Circle btn_close = new Circle();
btn_close.setLayoutX(25.0);
btn_close.setLayoutY(21.0);
btn_close.setRadius(7.0);
btn_close.setFill(Paint.valueOf("#ff481f"));
btn_close.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
stage.close();
}
});
root.getChildren().add(btn_close);
//最小化按钮
Circle btn_minimize = new Circle();
btn_minimize.setLayoutX(45.0);
btn_minimize.setLayoutY(21.0);
btn_minimize.setRadius(7.0);
btn_minimize.setFill(Paint.valueOf("orange"));
btn_minimize.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
stage.setIconified(true);
}
});
root.getChildren().add(btn_minimize); //logo
Image img_logo_main = new Image("com/liuzhiwen/img/logo_main.png",135,231,true,true);
ImageView iv_logo_main = new ImageView(img_logo_main);
iv_logo_main.setLayoutX(0);
iv_logo_main.setLayoutY(399);
root.getChildren().add(iv_logo_main); } catch (IOException e) {
e.printStackTrace();
}
} public Stage getStage(){
return this.stage;
} public static void showServerPane(){
serverPane = new ServerPane();
serverPane.getStage().show(); } }

自用的JavaFx轮子的更多相关文章

  1. 基于JavaFX图形界面演示的迷宫创建与路径寻找

    事情的起因是收到了一位网友的请求,他的java课设需要设计实现迷宫相关的程序--如标题概括. 我这边不方便透露相关信息,就只把任务要求写出来. 演示视频指路: 视频过审后就更新链接 完整代码链接: 网 ...

  2. 避免重复造轮子的UI自动化测试框架开发

    一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...

  3. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

  4. 【疯狂造轮子-iOS】JSON转Model系列之一

    [疯狂造轮子-iOS]JSON转Model系列之一 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 之前一直看别人的源码,虽然对自己提升比较大,但毕竟不是自己写的,很容易遗 ...

  5. h5engine造轮子

    基于学习的造轮子,这是一个最简单,最基础的一个canvas渲染引擎,通过这个引擎架构,可以很快的学习canvas渲染模式! 地址:https://github.com/RichLiu1023/h5en ...

  6. 如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源

    1.前言 关于微信内部正在使用的网络层封装库Mars开源的消息,1个多月前就已满天飞(参见<微信Mars:微信内部正在使用的网络层封装库,即将开源>),不过微信团队没有失约,微信Mars ...

  7. 存在即合理,重复轮子orm java版本

    1,业务描述前序? 需求来源于,公司的运营部门.本人所在公司(私营,游戏行业公司),从初创业,我就进入公司,一直致力于服务器核心研发. 公司成立块3年了,前后出产了4款游戏,一直在重复的制造公司游戏对 ...

  8. 问题记录:JavaFx 鼠标滑轮滚动事件监听!

    问题描述: 在listview的item里面添加鼠标拖拽排序功能.代码如下: setOnMouseDragged(event -> { //设定鼠标长按0.3秒后才可拖拽 防止误操作 isCan ...

  9. JavaFx客户端服务器C/S架构搭建

    客户端获取服务器端软件更新版本方法: package com.platform.ui.update; import java.io.BufferedInputStream; import java.i ...

  10. Appium 三种wait方法(appium 学习之改造轮子)

    前些日子,配置好了appium测试环境,至于环境怎么搭建,参考:http://www.cnblogs.com/tobecrazy/p/4562199.html   知乎Android客户端登陆:htt ...

随机推荐

  1. java.security.provider.getservice blocked

    JDK版本: JDK8u192 bug: https://bugs.openjdk.org/browse/JDK-8206333 堆栈: "Common-Business-Thread-57 ...

  2. React项目报错:Element type is invalid: expected a string可能的原因

    React项目报错:Element type is invalid: expected a string  起因:React使用Antd组件库,因为某些原因实在用不下去了,代码不变直接改成Tdesig ...

  3. wordpress插件开发时如何通过js调用图库/媒体选择器的问题

    效果: 原文地址: wordpress插件开发通过js调用图库/媒体选择器的问题 - 搜栈网 (seekstack.cn)

  4. 小白也能行【手撕ResNet代码篇(附代码)】:详解可复现

    目录 前言 model BasicBlock 和Bottleneck ResNet ResNet18\34\50\101\152 data train test 代码运行以及测试结果 前言 之前已经给 ...

  5. 深度解析Maven版本仲裁机制:核心规则与原理

    结论先行 Maven的版本仲裁机制本质是通过 依赖路径 和 声明顺序 的优先级规则,自动解决多版本依赖冲突.其核心规则为: 最短路径优先:依赖树中路径最短的版本生效. 相同路径则先声明优先:路径长度相 ...

  6. K8s新手系列之Pod中容器的镜像拉取策略

    概述 在 Kubernetes(K8s)里,容器镜像拉取策略(ImagePullPolicy)决定了 K8s 在创建或重启 Pod 时,如何处理容器镜像的拉取操作.这一策略能够确保使用的镜像始终是最新 ...

  7. 代码随想录第二十天 | Leecode 235. 二叉搜索树的最近公共祖先 、 701.二叉搜索树中的插入操作 、450.删除二叉搜索树中的节点

    Leecode 235. 二叉搜索树的最近公共祖先 题目描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p. ...

  8. 【记录】Python爬虫|爬取空间PC版日志模板

    目录 效果 运行结果 模板中免费的部分 损坏的模板 小彩蛋 代码 问题及解决方式 1. 返回数据_callback({})而非json 2. 获取封面图链接 注:2021/7/30做 效果 运行结果 ...

  9. Linux之新增文件夹

    一.格式 mkdir 文件名 二.案例 #查看文件 root@bbbbeb52:/# ll total 108 drwxr-xr-x. 1 root root 57 May 24 13:09 ./ d ...

  10. 用JavaScript打造全新编程语言:从无到有的完整实践指南

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...