wow7jiao 发表于 2022-1-5 16:58:46

请问加载图片为什么不写构造函数

本帖最后由 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;
        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 = new Image(imageUrls);
                        }
                       
                        // 保持比例,适应窗口显示
                        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 编辑

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


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

hjg 发表于 2022-1-6 07:27:36

好吧,现在用Java写图形化的是真的少,兄弟得更新一下Java路线了

wow7jiao 发表于 2022-1-6 11:40:18

hjg 发表于 2022-1-6 07:27
好吧,现在用Java写图形化的是真的少,兄弟得更新一下Java路线了

写着自己用的。。。。现在桌面软件没人写啊

hjg 发表于 2022-1-6 13:45:16

可以可以,看来版主才是大佬强 厉害 赞 真棒

ygygy 发表于 2022-1-6 21:03:58

{:5_103:}

小伤口 发表于 2022-1-7 00:01:56

本身就有一个默认的构造函数,写不写都看自己想不想{:10_243:}
页: [1]
查看完整版本: 请问加载图片为什么不写构造函数