自用的JavaFx轮子
一、窗体
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();
}
}
分类:
轮子
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本