最近8个小时我一直在阅读文档,但没有发现任何可以帮助我的东西。大概是,但是没有代码在工作,因为它一直说“找不到图像URL”并引发异常。但是我还有其他项目,从来没有这个问题。
因此,有一个类包含这样的月份:
public enum Month{JAN(1, "img.png",...DEC(12, "img.png"); private final int monthValue; private final String imgName; private Month(int monthValue, String imgName){ this.monthValue = monthValue; this.imgName = imgName; } public int getMonth(){ return monthValue; } public String getImage(){ return imgName;} }
到目前为止,一切都很好。我什至可以在控制台中对其进行测试,并且效果很好,并且可以按值排序。现在,当我尝试从资源中添加图像时,出现了我之前提到的问题:找不到URL。但是,我只能使用图像的1个值来做一个ImageView,使用的路径来自“ C:\ … \ resources \ monthImg.png”,但我与其他人一起工作,每次我在线发送图像时,他都必须更改图像目录。需要很多时间。
现在,我一直在尝试获取12张图像并将它们设置为主项目类中的该枚举。这样,我便可以分配给节点并工作GUI。
我有两个名为“ main”的包(包含主类和月份类及其构造函数和方法),还有一个资源包,也称为“ main”,位于另一个文件夹中(包含所有图像)。请记住,如果我使用C:\的完整完整路径,它会起作用,但我也想在项目本身中启动它,然后将其发送给我的朋友。
这种方法是什么样的,因此我可以像上面链接中的示例一样,在VBox内的子孙值中使这些图像具有值堆栈。
注意:该项目旨在使这些图像看起来像是带有 拖放选项 的日历(我知道要这样做)。谢谢。
尝试逐步解决问题。 您可以从使列表视图显示所需图像开始。使用热链接图像使代码更加繁琐,并使帮助和测试变得简单而有效:
import java.util.stream.Stream; import javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.geometry.Orientation; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.control.ListCell; import javafx.scene.control.ListView; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.TilePane; import javafx.stage.Stage; public class FxMain extends Application { @Override public void start(Stage primaryStage) { MonthListCell[] listCell = Stream.of(Month.values()).map(MonthListCell::new).toArray(MonthListCell[]::new); ObservableList<MonthListCell> items =FXCollections.observableArrayList (listCell); ListView<MonthListCell> listView = new ListView<>(items); primaryStage.setScene(new Scene(listView)); primaryStage.sizeToScene(); primaryStage.show(); } public static void main(String[] args) { launch(null); } } enum Month{ JAN(1,"https://cdn3.iconfinder.com/data/icons/softwaredemo/PNG/64x64/Circle_Green.png"), FEB(2,"https://cdn3.iconfinder.com/data/icons/softwaredemo/PNG/64x64/Circle_Red.png"), MAR(3,"https://cdn3.iconfinder.com/data/icons/softwaredemo/PNG/64x64/Circle_Yellow.png"), APR(4,"https://cdn3.iconfinder.com/data/icons/softwaredemo/PNG/64x64/Circle_Blue.png"), MAY(5,"https://cdn3.iconfinder.com/data/icons/softwaredemo/PNG/64x64/Circle_Orange.png"), JUN(6,"https://cdn3.iconfinder.com/data/icons/softwaredemo/PNG/64x64/Circle_Grey.png"); private final int monthValue; private final String imgName; private Month(int monthValue, String imgName){ this.monthValue = monthValue; this.imgName = imgName; } public int getMonth(){ return monthValue; } public String getImage(){ return imgName; } } class MonthListCell extends ListCell<Month> { private final ImageView imageView; private final Label text; MonthListCell(Month month) { Image image = new Image(month.getImage()); imageView = new ImageView(image); //use label for text instead of setText() for better layout control text = new Label(month.name()); TilePane node = new TilePane(Orientation.VERTICAL, 5, 0, imageView, text); setGraphic(node); } @Override public void updateItem(Month month, boolean empty) { super.updateItem(month, empty); if (empty) { setText(null); setGraphic(null); } else { imageView.setImage(new Image(month.getImage())); text.setText(month.name()); } } }
接下来,尝试使用本地资源(图像)而不是链接的资源。