我已经用几个按钮构建了一个使用Scenebuilder的简单GUI。在SceneBuilder中,一切都显示正常。为什么不使用Scenebuilder和Eclipse使用FXML for JavaFX显示图像?
但是当我运行该程序时,除了一个按钮之外的所有按钮,它们的所有ImageViewer图像都正常显示。我之前遇到过这个问题,在清理完这个项目之后,事情就出现了,但这次不是。我使用文档引用来指向图像,并且使用的所有图像都存在,即它们与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线程内。
根据我在你的描述中可以读到的内容几乎是不可能的。我的猜测是一个拼写错误的名字。你可以创建一个[MCVE](http://stackoverflow.com/help/mcve)吗? – Mansueli
我一直在尝试,但它在其他地方起作用。我希望它拼写错误,但我检查了fxml,scenebuilder和图像本身,他们都检查出来。我每次在Scenebuilder中进行更改时都必须在Eclipse中清理和构建项目,这也有点令人烦恼,否则这些更改在运行时不会反映出来。也许这是问题的根源? –
发布了FXML的代码以及您对非工作按钮的代码。添加了代码 – Mansueli