Я знаю, этот вопрос задавался сотни раз, и я провел последние 3 часа, читая их все.Я пишу небольшое приложение с JavaFX (и я делал это раньше ...).Все работает, кроме помещения содержимого в мою колонку:
@FXML public void initialize() {
exerciseColumn.setCellValueFactory(new PropertyValueFactory<Exercise, String>("name"));
}
Это мой метод инициализации, а вот:
public StringProperty nameProperty() {
return name;
}
- это средство получения свойства для "StringProperty name".Действительно забавно то, что код является точной копией другого проекта, который я сделал некоторое время назад (я, конечно, дважды и трижды проверил все), который я сегодня снова скомпилировал, и он работает отлично.Я читаю документ, который, как кажется, наполовину JavaFX, чтобы найти решение, но это просто не имеет никакого смысла.Если вы считаете, что вам нужно больше кода, чтобы помочь мне, тогда я, конечно, могу предоставить его.
edit: еще один пример с той же проблемой (по крайней мере, я на это надеюсь)
Main:
package test;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
import test.model.Exercise;
import test.view.Controller;
public class Main extends Application {
private Stage primaryStage;
private AnchorPane pane;
private ObservableList<Exercise> activeSession = FXCollections.observableArrayList();
public Main() {
activeSession.add(new Exercise("ednhzrd"));
}
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
this.primaryStage = primaryStage;
this.primaryStage.setTitle("Test");
try {
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("view/view.fxml"));
pane = (AnchorPane) loader.load();
Scene scene = new Scene(pane);
primaryStage.setScene(scene);
primaryStage.show();
Controller controller = new Controller();
controller.setMainApp(this);
} catch(Exception e) {
e.printStackTrace();
}
}
}
Контроллер:
package test.view;
import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import test.Main;
import test.model.Exercise;
public class Controller {
@FXML private TableView<Exercise> exerciseTable;
@FXML private TableColumn<Exercise, String> exerciseColumn;
private Main main;
public Controller() {}
@FXML
public void initialize() {
exerciseColumn.setCellValueFactory(cellData -> cellData.getValue().nameProperty());
}
public void setMainApp(Main main) {
this.main = main;
}
}
Упражнение:
enter codepackage test.model;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
public class Exercise {
private StringProperty name;
public Exercise(String name) {
this.name = new SimpleStringProperty(name);
}
public StringProperty nameProperty() {
return name;
}
}
fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<AnchorPane prefHeight="400.0" prefWidth="209.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="test.view.Controller">
<children>
<TableView fx:id="exerciseTable" layoutX="200.0" layoutY="100.0" prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<columns>
<TableColumn fx:id="exerciseColumn" prefWidth="75.0" text="C1" />
</columns>
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView>
</children>
</AnchorPane>