鱼C论坛

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

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

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

import java.io.File;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;

public class Main extends Application
{
        // 资源图片
        String[] imageUrls = {
                "application/res/hangmu.jpg",
                "application/res/tiangong.jpg",
                "application/res/kongjing500.jpg",
        };
        Image[] images = new Image[3];
        ImageView imageView = new ImageView();
        
        int currentIndex =0; // 当前显示的是哪个图片
        
        @Override
        public void start(Stage primaryStage)
        {
                try
                {
                        BorderPane root = new BorderPane();
                        
                        Button btnOpen = new Button("下一张");
                        
                        // 按钮点击事件的处理
                        btnOpen.setOnAction(new EventHandler<ActionEvent>() {
                                @Override
                                public void handle(ActionEvent event)
                                {
                                        Main.this.showNext();                                        
                                }                                
                        });
                        
                        // 加载图片《--------------------------------------------------------------------------------------------------------------------就是这里
                        for(int i=0; i<images.length; i++)
                        {
                                images[i] = new Image(imageUrls[i]);
                        }
                        
                        // 保持比例,适应窗口显示
                        imageView.setPreserveRatio(true);
                        imageView.setFitWidth(400);
                        imageView.setFitHeight(400);
                        
                        root.setTop(btnOpen); // 上面显示按钮
                        root.setCenter(imageView); // 中间显示图片
                        
                        Scene scene = new Scene(root, 400, 400);
                        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
                        primaryStage.setScene(scene);
                        primaryStage.show();
                        
                        // 
                        showNext();
                        
                } catch (Exception e)
                {
                        e.printStackTrace();
                }
        }
        
        // 显示下个图片
        public void showNext()
        {
                currentIndex ++;
                if(currentIndex >=3) currentIndex = 0;
                
                imageView.setImage( images[ currentIndex ]);
        }
        

        public static void main(String[] args)
        {
                launch(args);
        }
}


这种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) 还有就是你的标题,一般图片音频视频都是比较大的文件,所以设成静态属性,用静态 ...
想知道小甲鱼最近在做啥?请访问 -> 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)


还有就是你的标题,一般图片音频视频都是比较大的文件,所以设成静态属性,用静态块赋值
而不是用构造函数赋值,因为构造函数每一次实例化都需要赋值一次。而静态属性从头到尾只赋值一次就可以。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-6 07:27:36 | 显示全部楼层
好吧,现在用Java写图形化的是真的少,兄弟得更新一下Java路线了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

写着自己用的。。。。现在桌面软件没人写啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-6 13:45:16 | 显示全部楼层
可以可以,看来版主才是大佬强 厉害 赞 真棒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-6 21:03:58 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-7 00:01:56 | 显示全部楼层
本身就有一个默认的构造函数,写不写都看自己想不想
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-5 16:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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