我使用带有几个按钮的Scenebuilder构建了一个简单的GUI。在SceneBuilder中,一切都很好。
但是当我运行程序时,除了一个按钮之外的所有按钮,所有的ImageViewers'图像显示正常。我之前遇到过这个问题,在清理完项目之后,事情就出现了,但不是这次。我使用文档引用指向图像,并且所有使用的图像都存在,即它们与fxml和控制器类在同一目录中。
知道问题背后可能是什么原因?
编辑: 这是(缩短的)fxml代码
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.image.*?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.VBox?>
<fx:root onMouseDragged="#onMouseDrag" onMouseEntered="#onMouseEnter" onMouseExited="#onMouseExit" prefHeight="500.0" prefWidth="600.0" type="VBox" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<ToolBar onMouseDragged="#onMouseDrag" onMouseEntered="#onMouseEnter" onMouseExited="#onMouseExit" prefHeight="0.0" prefWidth="376.0">
<items>
<Button fx:id="closeButton" mnemonicParsing="false" onAction="#closeWindow">
<graphic>
<ImageView fitHeight="40.0" fitWidth="40.0" pickOnBounds="true" smooth="false">
<image>
<Image url="@images/close-32.png" />
</image>
</ImageView>
</graphic>
</Button>
</items>
</ToolBar>
</children>
</fx:root>
这是简单的控制器。我明确地在托管阶段调用设置
public LogViewerControllerFX() {
Platform.setImplicitExit(false);
}
public void setup() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource(
"LogViewerFX.fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
try {
fxmlLoader.load();
} catch (IOException e) {
e.printStackTrace();
}
}
这是舞台:
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.paint.Color;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
public class LogViewerDialogFX extends Stage {
public LogViewerDialogFX() {
LogViewerControllerFX logViewController = new LogViewerControllerFX();
logViewController.setup();
Scene scene = new Scene(logViewController);
scene.setFill(Color.TRANSPARENT);
setScene(scene);
initStyle(StageStyle.TRANSPARENT);
initModality(Modality.WINDOW_MODAL);
setTitle(I18N.getText("title.logViewer"));
getIcons().add(new Image("net/logviewer/image/logs-25.png"));
}
}
当然,这一切都发生在JavaFX线程中。
答案 0 :(得分:1)
也许尝试重建你的eclipse项目。 或者尝试将图像设置为css。
<Button styleClass="Button-Image"/>
.Button-Image{
-fx-graphic: url('images/close-32.png');
}
答案 1 :(得分:1)
如果我错了,请纠正我,但请看一下:
<Image url="@images/close-32.png" />
指&#39; / images /&#39;中的图像。夹。但是:
getIcons().add(new Image("net/logviewer/image/logs-25.png"));
指&#39; / image /&#39;中的图像。夹。 如您所见,它们都指向不同的文件夹。您可能想要检查哪一个是正确的,&#39; image /&#39;或&#39;图像/&#39;文件夹中。
答案 2 :(得分:0)
我不确定这是否构成了一个好的答案,但我通过重做所有涉及的图像的引用(它们在fxml上的结果相同)来重新启动Eclipse和SceneBuilder,并完成了所有项目的完整清理。
就像我之前注意到的那样,只有在清理之后,SceneBuilder中的更改才能在Eclipse中使用。我不确定它是否是e(fx)clipse插件,或者Eclipse如何处理fxml文件,但在那个特定的过程中肯定需要改进。