Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Moin,
ich bin eben dabei, meine bisherige FX-Anwendung in Klassen aufzuteilen. Leider gelingt es nicht, die setCellValueFactory funktionierend in der Klasse der Column zu erstellen. Die Column wird zwar erstellt, aber sie bleibt leer.
Wäre klasse, wenn da jemand eine Idee zu hätte.
Folgend mal die bisherige Variante der Methode.
Zur Vervollständigung. Dabei ist auch noch die setRowFactory aus der Table Class, denn diese wird leider auch gar nicht erkannt.
[CODE lang="java" title="Aus Main class"]CalendarTable mainCalendarTable = new CalendarTable();
mainCalendarTable.setRowFactory(mainCalendarTable);
CalendarColumn column1 = new CalendarColumn("name");
column1.getUserCol().cellValueFactory("name");[/CODE]
[CODE lang="java" title="Aus Table Class"] public void setRowFactory1(TableView name) {
this.name.setRowFactory(row -> new TableRow<Date>() {
private TableView name;
Zur Vervollständigung. Dabei ist auch noch die setRowFactory aus der Table Class, denn diese wird leider auch gar nicht erkannt.
[CODE lang="java" title="Aus Main class"]CalendarTable mainCalendarTable = new CalendarTable();
mainCalendarTable.setRowFactory(mainCalendarTable);
CalendarColumn column1 = new CalendarColumn("name");
column1.getUserCol().cellValueFactory("name");[/CODE]
[CODE lang="java" title="Aus Table Class"] public void setRowFactory1(TableView name) {
this.name.setRowFactory(row -> new TableRow<Date>() {
private TableView name;
@lam_tr Danke für die Antwort. Der String Parameter ist im Programm korrekt, hatte ich hier im Code versehentlich falsch dargestellt.
"CalendarColumn" ist die Klasse, aus welcher die TableColumns stammen. In dieser heißt das Attribut der TableColumn "userCol".
@mrBrown danke für die Antwort, folgend der ausführlichere Code.
Die Tabelle, bzw. dessen Spalten werden dargestellt. Die Werte, solange ich die CellValueFactory in der Main Class belasse, ebenso. Nur nach dem Erstellen in der separaten Klasse nicht mehr.
[CODE lang="java" title="Aus Main Class"]public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
CalendarTable mainCalendarTable = new CalendarTable();
mainCalendarTable.setRowFactory(mainCalendarTable);
CalendarColumn column1 = new CalendarColumn(user1.getName());
column1.getUserCol().cellValueFactory(user1.getName());
Scene mainScene = new Scene(main,400,400);
mainScene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(mainScene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
}[/CODE]
Java:
public class CalendarTable {
private TableView <Date> name;
private Stage primaryStage;
public CalendarTable () {
this.name = new TableView<>();
this.primaryStage = Main.getPrimaryStage(primaryStage);
}
public Stage calendarProperty (Stage promaryStage) {
this.name.prefHeightProperty().bind(primaryStage.heightProperty());
this.name.prefWidthProperty().bind(primaryStage.widthProperty());
return primaryStage;
}
public void setRowFactory(CalendarTable mainCalendarTable) {
this.name.setRowFactory(row -> new TableRow<Date>() {
private TableView name;
@Override
public void updateItem(Date item, boolean empty) {
super.updateItem(item, empty);
if (item == null || item.getDayOfWeek().equals(null)) {
this.setId("not-weekend-row");
}
else if (item.getDayOfWeek().equals("SUNDAY") || item.getDayOfWeek().equals("SATURDAY")) {
getStyleClass().add("weekend-row");
this.name.refresh();
}
else {
getStyleClass().add("not-weekend-row");
this.name.refresh();
}
}
});
}
Java:
public class CalendarColumn {
private TableColumn <Date, String> userCol;
private String name;
public CalendarColumn (String name, int prefWidth, boolean vis, boolean sort) {
this.userCol = new TableColumn<>(name);
}
public void cellValueFactory (TableColumn userCol) {
this.userCol.setCellValueFactory(new PropertyValueFactory <> ("userCol.getName"));
}