private static ImageView imageView;EventListener listen;VBox messageBox;//聊天气泡int petID = 1;//宠物ID。罗小黑=0,比丢=1double xOffset = 0;double yOffset = 0; 123456
Image image = new Image(this.getClass().getResourceAsStream("/biu/biu0.gif"));//biu即比丢ImageView imageView = new ImageView(image);//设置容器的位置imageView.setX(0);imageView.setY(0);imageView.setLayoutX(0);imageView.setLayoutY(50);//设置图片显示的大小imageView.setFitHeight(150);imageView.setFitWidth(150);imageView.setPreserveRatio(true); //保留 width:height的比例 1234567891011
特别说明:加载相对路径的图片要用class.getResourceAsStream,不然打包成jar包运行时会报错:找不到文件路径!路径中第一个“/”是必需的,它表示类的根目录,类文件夹在此项目中与lxh文件夹和biu文件夹在同一级。
UI ui = new UI(imageView, petID, listen,primaryStage);ui.addMessageBox("你好吖~"); 12
AnchorPane pane = new AnchorPane(ui.getMessageBox(),ui.getImageView());Scene scene = new Scene(pane,400,400);scene.setFill(null);primaryStage.setScene(scene);//设置窗体的初始位置primaryStage.setX(850);primaryStage.setY(400);primaryStage.setAlwaysOnTop(true);//窗口总显示在最前//因为最后要播放告别动画,所以要延缓关闭primaryStage.setOnCloseRequest( event ->{event.consume(); ui.end();});primaryStage.show(); 1234567891011
对primaryStage.setOnCloseRequest( event ->{event.consume(); ui.end();});的说明:
点击任务栏的“关闭窗口”时,播放告别动画,同时使托盘的图标也关闭。event.consume()是必需的,这样才能真正阻止Window Close事件的默认处理。如果不设置告别动画,可以仅仅使用System.exit(0);来直接退出,不需要event.consume();imageView.setStyle("-fx-background:transparent;"); pane.setStyle("-fx-background:transparent;"); primaryStage.initStyle(StageStyle.TRANSPARENT); 123
这样做之后标题栏、边框、右上角的关闭等按钮也都没有了。
//先获取按下鼠标时的坐标p1,再将窗体坐标设为p1加拖动的位移量pane.setOnMousePressed(event -> { xOffset = event.getSceneX(); yOffset = event.getSceneY();});pane.setOnMouseDragged(event -> {primaryStage.setX(event.getScreenX() - xOffset);primaryStage.setY(event.getScreenY() - yOffset);}); 123456789
public class Main extends Application {private static ImageView imageView;EventListener listen;VBox messageBox;//聊天气泡int petID = 1;//宠物ID。罗小黑=0,比丢=1double xOffset = 0;double yOffset = 0;public void start(Stage primaryStage) {try {/* * 创建初始的图 * 加载相对路径的图片要用class.getResource,不然运行jar包时会报错:找不到文件路径! * 路径中第一个“/”是必需的,它表示类的根目录,类文件夹在此项目中与lxh和biu在同一级 */Image image = new Image(this.getClass().getResourceAsStream("/biu/biu0.gif"));imageView = new ImageView(image);imageView.setX(0);imageView.setY(0);imageView.setLayoutX(0);imageView.setLayoutY(50);//设置图片显示的大小imageView.setFitHeight(150);imageView.setFitWidth(150);//添加图片的点击事件listen = new EventListener(imageView , petID);imageView.addEventHandler(MouseEvent.MOUSE_CLICKED, listen);imageView.setPreserveRatio(true); //保留 width:height的比例imageView.setStyle("-fx-background:transparent;");//容器背景设为透明UI ui = new UI(imageView, petID, listen,primaryStage);ui.addMessageBox("你好吖~");AnchorPane pane = new AnchorPane(ui.getMessageBox(),ui.getImageView());pane.setStyle("-fx-background:transparent;");//使窗体能拖动。先获取按下鼠标时的坐标p1,再将窗体坐标设为p1加拖动的位移量pane.setOnMousePressed(event -> { xOffset = event.getSceneX(); yOffset = event.getSceneY();});pane.setOnMouseDragged(event -> {primaryStage.setX(event.getScreenX() - xOffset);primaryStage.setY(event.getScreenY() - yOffset);});Scene scene = new Scene(pane,400,400);scene.setFill(null);scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());primaryStage.setScene(scene);//设置窗体的初始位置primaryStage.setX(850);primaryStage.setY(400);primaryStage.setAlwaysOnTop(true);//窗口总显示在最前//修改任务栏图标primaryStage.getIcons().add(new Image(getClass().getResourceAsStream("icon.png")));//下句隐藏任务栏图标,但javafx的stage.initStyle(Style)只能有一个起效,只好作罢 //stage.initStyle(StageStyle.UTILITY);primaryStage.initStyle(StageStyle.TRANSPARENT);//背景透明/* * 点击任务栏的“关闭窗口”时,播放告别动画,同时使托盘的图标也关闭. * event.consume()是必需的,这样才能真正阻止Window Close事件的默认处理。 * 如果仅仅使用System.exit(0);则不需要event.consume();*/primaryStage.setOnCloseRequest( event ->{event.consume(); ui.end();});primaryStage.show();ui.setTray(primaryStage);//添加系统托盘Thread thread = new Thread(ui);thread.start();} catch(Exception e) {e.printStackTrace();}}public static void main(String[] args) {launch(args);} }
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980相关知识
用JAVAFX做一个简单的桌面宠物(三)
java开发桌面宠物
用python做一个宠物系统
用简单食材,给狗狗做一个真正能吃的生日蛋糕吧
用QT实现一个简单的桌面宠物
桌面宠物,3只可爱的小猫
用Python制作桌面宠物
基于WPF的桌面宠物开发(一) :WPF简介+环境搭建+简单界面
用Python写个桌面挂件,手把手带你做只桌面宠物~
Python实现桌面挂件,做一只可爱的桌面宠物~
网址: 用JAVAFX做一个简单的桌面宠物(一) https://m.mcbbbk.com/newsview692255.html
上一篇: 猫咪便利店 |
下一篇: 让宠物狗不再把鞋子叼上床的方法( |