鱼C论坛

 找回密码
 立即注册
查看: 2563|回复: 6

[已解决]请问加载图片为什么不写构造函数

[复制链接]
发表于 2022-1-5 16:58:46 | 显示全部楼层 |阅读模式
60鱼币
本帖最后由 wow7jiao 于 2022-1-6 11:44 编辑
  1. package application;

  2. import java.io.File;

  3. import javafx.application.Application;
  4. import javafx.event.ActionEvent;
  5. import javafx.event.EventHandler;
  6. import javafx.stage.FileChooser;
  7. import javafx.stage.Stage;
  8. import javafx.scene.Scene;
  9. import javafx.scene.control.Button;
  10. import javafx.scene.image.Image;
  11. import javafx.scene.image.ImageView;
  12. import javafx.scene.layout.BorderPane;

  13. public class Main extends Application
  14. {
  15.         // 资源图片
  16.         String[] imageUrls = {
  17.                 "application/res/hangmu.jpg",
  18.                 "application/res/tiangong.jpg",
  19.                 "application/res/kongjing500.jpg",
  20.         };
  21.         Image[] images = new Image[3];
  22.         ImageView imageView = new ImageView();
  23.        
  24.         int currentIndex =0; // 当前显示的是哪个图片
  25.        
  26.         @Override
  27.         public void start(Stage primaryStage)
  28.         {
  29.                 try
  30.                 {
  31.                         BorderPane root = new BorderPane();
  32.                        
  33.                         Button btnOpen = new Button("下一张");
  34.                        
  35.                         // 按钮点击事件的处理
  36.                         btnOpen.setOnAction(new EventHandler<ActionEvent>() {
  37.                                 @Override
  38.                                 public void handle(ActionEvent event)
  39.                                 {
  40.                                         Main.this.showNext();                                       
  41.                                 }                               
  42.                         });
  43.                        
  44.                         // 加载图片《--------------------------------------------------------------------------------------------------------------------就是这里
  45.                         for(int i=0; i<images.length; i++)
  46.                         {
  47.                                 images[i] = new Image(imageUrls[i]);
  48.                         }
  49.                        
  50.                         // 保持比例,适应窗口显示
  51.                         imageView.setPreserveRatio(true);
  52.                         imageView.setFitWidth(400);
  53.                         imageView.setFitHeight(400);
  54.                        
  55.                         root.setTop(btnOpen); // 上面显示按钮
  56.                         root.setCenter(imageView); // 中间显示图片
  57.                        
  58.                         Scene scene = new Scene(root, 400, 400);
  59.                         scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
  60.                         primaryStage.setScene(scene);
  61.                         primaryStage.show();
  62.                        
  63.                         //
  64.                         showNext();
  65.                        
  66.                 } catch (Exception e)
  67.                 {
  68.                         e.printStackTrace();
  69.                 }
  70.         }
  71.        
  72.         // 显示下个图片
  73.         public void showNext()
  74.         {
  75.                 currentIndex ++;
  76.                 if(currentIndex >=3) currentIndex = 0;
  77.                
  78.                 imageView.setImage( images[ currentIndex ]);
  79.         }
  80.        

  81.         public static void main(String[] args)
  82.         {
  83.                 launch(args);
  84.         }
  85. }
复制代码



这种launch开头的没见过啊,一般教材都是main()里面new一个对象,然后给参数或者不给构造初始化对象,接着对象.start().
最佳答案
2022-1-5 16:58:47
本帖最后由 洋洋痒 于 2022-1-7 13:20 编辑

我没学过这个类,但是你问的应该是java基础问题
从代码来看这个launch()应该是javafx.application.Application类中的一个静态方法
你写的Main类继承了javafx.application.Application类,也就有了这个静态方法
在main函数中是可以直接调用同一个类中的静态方法的
所以launch(args);这句话就是在主类中调用了静态方法launch(args)


还有就是你的标题,一般图片音频视频都是比较大的文件,所以设成静态属性,用静态块赋值
而不是用构造函数赋值,因为构造函数每一次实例化都需要赋值一次。而静态属性从头到尾只赋值一次就可以。

最佳答案

查看完整内容

我没学过这个类,但是你问的应该是java基础问题 从代码来看这个launch()应该是javafx.application.Application类中的一个静态方法 你写的Main类继承了javafx.application.Application类,也就有了这个静态方法 在main函数中是可以直接调用同一个类中的静态方法的 所以launch(args);这句话就是在主类中调用了静态方法launch(args) 还有就是你的标题,一般图片音频视频都是比较大的文件,所以设成静态属性,用静态 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-5 16:58:47 | 显示全部楼层    本楼为最佳答案   
本帖最后由 洋洋痒 于 2022-1-7 13:20 编辑

我没学过这个类,但是你问的应该是java基础问题
从代码来看这个launch()应该是javafx.application.Application类中的一个静态方法
你写的Main类继承了javafx.application.Application类,也就有了这个静态方法
在main函数中是可以直接调用同一个类中的静态方法的
所以launch(args);这句话就是在主类中调用了静态方法launch(args)


还有就是你的标题,一般图片音频视频都是比较大的文件,所以设成静态属性,用静态块赋值
而不是用构造函数赋值,因为构造函数每一次实例化都需要赋值一次。而静态属性从头到尾只赋值一次就可以。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-6 07:27:36 | 显示全部楼层
好吧,现在用Java写图形化的是真的少,兄弟得更新一下Java路线了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-1-6 11:40:18 | 显示全部楼层
hjg 发表于 2022-1-6 07:27
好吧,现在用Java写图形化的是真的少,兄弟得更新一下Java路线了

写着自己用的。。。。现在桌面软件没人写啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-6 13:45:16 | 显示全部楼层
可以可以,看来版主才是大佬强 厉害 赞 真棒
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-6 21:03:58 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-1-7 00:01:56 | 显示全部楼层
本身就有一个默认的构造函数,写不写都看自己想不想
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-15 05:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表