请问加载图片为什么不写构造函数
本帖最后由 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-7 13:20 编辑
{:5_92:}我没学过这个类,但是你问的应该是java基础问题
从代码来看这个launch()应该是javafx.application.Application类中的一个静态方法
你写的Main类继承了javafx.application.Application类,也就有了这个静态方法
在main函数中是可以直接调用同一个类中的静态方法的
所以launch(args);这句话就是在主类中调用了静态方法launch(args)
还有就是你的标题,一般图片音频视频都是比较大的文件,所以设成静态属性,用静态块赋值
而不是用构造函数赋值,因为构造函数每一次实例化都需要赋值一次。而静态属性从头到尾只赋值一次就可以。 好吧,现在用Java写图形化的是真的少,兄弟得更新一下Java路线了 hjg 发表于 2022-1-6 07:27
好吧,现在用Java写图形化的是真的少,兄弟得更新一下Java路线了
写着自己用的。。。。现在桌面软件没人写啊 可以可以,看来版主才是大佬强 厉害 赞 真棒 {:5_103:} 本身就有一个默认的构造函数,写不写都看自己想不想{:10_243:}
页:
[1]