我有2个控制器为2个fxml文件。在一个控制器中,我有一个handleopen
函数,它打开一个文件选择器,并给出一个我称之为Model的类的路径。然后在另一个控制器上有一个函数TreetableDraw
在单击Draw按钮并运行程序后获取该路径。我有另一个按钮来重置程序。它将结果设置为null,但当打开另一个文件运行时,程序崩溃,因为路径为null。如何重置程序并使其使用从打开文件选择器中选择的新路径?
//Gets the path from model and runs the program
public void treeTableDraw(ActionEvent event) {
new Controller(model.getText());
drawTable();
numberOfFunctions = dc.getFuncAll().size();
numberOfOrganizations = dc.getSortedAssignedOrg().size();
funcLabel.setText(numberOfFunctions + "");
orgLabel.setText(numberOfOrganizations + "");
btnDraw.setDisable(true);
}
/**
* Clrears TreeTableView and sets back labels
*
* @param event
*/
public void treeTableReset(ActionEvent event) {
btnDraw.setDisable(false);
model.setText(null);
funcLabel.setText("0");
orgLabel.setText("0");
treeTable.getColumns().clear();
}
@FXML
private void handleOpen() {
FileChooser fileChooser = new FileChooser();
// Set extension filter
FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter(
"3lgm2 files (*.z3lgm)", "*z3lgm");
fileChooser.getExtensionFilters().add(extFilter);
// Show open file dialog
File file = fileChooser.showOpenDialog(main.getPrimaryStage());
if (file != null) {
path = file.toString();
model.setText(path);
}
}
public class Model {
private final StringProperty text = new SimpleStringProperty();
public StringProperty textProperty() {
return text;
}
public final String getText() {
return textProperty().get();
}
public final void setText(String text) {
textProperty().set(text);
}
}
public class Main extends Application {
private Stage primaryStage;
private BorderPane rootLayout;
private Model model = new Model();
@Override
public void start(Stage primaryStage) {
this.primaryStage = primaryStage;
this.primaryStage.setTitle("IT-Saturation");
initRootLayout();
showOverView();
}
private void showOverView() {
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("/view/OverView.fxml"));
loader.setController(new OverViewController(model));
AnchorPane overView = (AnchorPane) loader.load();
rootLayout.setCenter(overView);
} catch (IOException e) {
e.printStackTrace();
}
}
private void initRootLayout() {
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("/view/RootLayout.fxml"));
loader.setController(new RootLayoutController(model));
rootLayout = (BorderPane) loader.load();
// show scene containing the root layout
Scene scene = new Scene(rootLayout);
scene.getStylesheets().add(
getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
// gives controller access to main
RootLayoutController controller = loader.getController();
controller.setMainApp(this);
primaryStage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Returns the main stage.
*
* @return primaryStage
*/
public Stage getPrimaryStage() {
return primaryStage;
}
public static void main(String[] args) {
launch(args);
}
public void showMostComputerizedStatistics() {
try {
// Load the fxml file and create a new stage for the popup.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class
.getResource("view/BirthdayStatistics.fxml"));
AnchorPane page = (AnchorPane) loader.load();
Stage dialogStage = new Stage();
dialogStage.setTitle("Birthday Statistics");
dialogStage.initModality(Modality.WINDOW_MODAL);
dialogStage.initOwner(primaryStage);
Scene scene = new Scene(page);
dialogStage.setScene(scene);
// Set the persons into the controller.
MostComputerizedController controller = loader.getController();
dialogStage.show();
} catch (IOException e) {
e.printStackTrace();
}
}
问题不在于路径。我不得不重置在程序的前一次运行中初始化的数据。因此,在将path设置为null之后,我只需要更新类的实例,它引用了数据。
...
public void treeTableReset(ActionEvent event) {
btnDraw.setDisable(false);
//model.setText(null);
funcLabel.setText("0");
orgLabel.setText("0");
treeTable.getColumns().clear();
dc = new DataConstructor();
}
我有一个swing应用程序,需要在其中运行和打开JavaFX场景/阶段。我必须在没有扩展应用程序的情况下运行它。我已经尝试了Stackoverflow上发布的大多数解决方案,但没有一个在我的情况下有效。 这是我的最新尝试,我正在获得NullPointerException。我的舞台变空了。此行->[stage.setscene(new Scene(root,SCENEWIDTH,SCENEHEIG
(我是java BTW的新手!)
我读了这个https://bugs.openjdk.java.net/browse/JDK-8102128,但我还没有在JavaFX 8的Api中找到一些东西。在TableView中没有防止重新排序的方法吗?
我的朋友最近给我发送了我们正在处理的javaFX项目的源代码。但是我无法运行它,因为它没有正确配置。如果我尝试将其配置为“应用程序”,但它不允许我选择MainClass文件。它最初是在Eclipse中编程的。有人能解释一下我如何运行这个程序吗?在项目结构中,我将Artifacts设置为javaFX应用程序,但这似乎没有改变什么。
我已经安装了intellij,并且试图打开一个新的javafx,但是我无法运行它(即使是基本的默认的,应该只是打开一个简单的窗口)。我使用的是JDK11(我必须),所以我下载了javafx,就像本文中所说的那样: 错误:JavaFX运行时组件丢失,而使用JDK 11运行此应用程序需要JavaFX运行时组件 但我得到了这个错误 如果我试着在溶液中做这一行 然后在run->edit configura
即使在Eclipse中安装了javafx程序,我也不能运行javafx程序。我在运行javafx程序后遇到的错误