Я пытаюсь заполнить свой TableView контактами.Я проверил на опечатки (получить и установить), как это проверено на Java-машине для реализации столбцов, но ничего не меняется, у меня все еще есть та же ошибка отражения данных
Основной класс
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root =
FXMLLoader.load(getClass().getResource("contactsScene.fxml"));
primaryStage.setTitle("Contact World");
primaryStage.setScene(new Scene(root, 700, 500));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Класс контакта
public class Contact {
public SimpleStringProperty firstName;
public SimpleStringProperty lastName;
public SimpleStringProperty number;
public Contact(String firstName, String lastName, String number) {
this.firstName = new SimpleStringProperty(firstName);
this.lastName = new SimpleStringProperty(lastName);
this.number = new SimpleStringProperty(number);
}
public String getFirstName() {
return firstName.get();
}
public SimpleStringProperty firstNameProperty() {return firstName;
}
public void setFirstName(String firstName) {
this.firstName.set(firstName);
}
}
Класс контроллера
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
public class Controller{
@FXML
private TableView<Contact> contactTableView;
ObservableList<Contact>data=FXCollections.observableArrayList();
public void initialize(){
data.addAll(new Contact("Joe","Factory","000000000"),
new Contact("Mickael","Cell","000000000"),
new Contact("Gerard","Data","00000000"),
new Contact("john","Reflectivity","0000000000"));
TableColumn firstNameCol=new TableColumn("First Name");
firstnameCol.setCellValueFactory(new PropertyValueFactory<Contact, String>("firstName"));
contactTableView.setItems(data);
contactTableView.getColumns().addAll(firstNameCol);
}
}}
FXML
<?import javafx.scene.control.Menu?>
<?import javafx.scene.control.MenuBar?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.control.ListView?>
<BorderPane xmlns:fx="http://javafx.com/fxml/1"
xmlns="http://javafx.com/javafx/8.0.172-ea"
fx:controller="contactManagement.Controller"><top><VBox>
<MenuBar><Menu text="contacts" /> </MenuBar></VBox></top>
<center>
<TableView fx:id="contactTableView">
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView></center>
</BorderPane>
Stacktrace
févr.06, 2019 15:47:23 javafx.scene.control.cell.PropertyValueFactory getCellDataReflectively ПРЕДУПРЕЖДЕНИЕ. Невозможно получить свойство 'firstName' в PropertyValueFactory: javafx.scene.control.cell.PropertyValue6cactory_cellueтип класса: class contactManagement.ContactManager.Contact java.lang.RuntimeException: java.lang.IllegalAccessException: модуль javafx.base не может получить доступ к классу contactManagement.ContactManager.Contact (в модуле Contact), потому что модуль Contact не открывает contactManagement.ContactManager для javafx.base в javafx.base / com.sun.javafx.property.PropertyReference.getProperty (PropertyReference.java:199) в javafx.controls / javafx.scene.control.cell.PropertyValueFactory.getCellDataRalleFlive (DataReflective): 182) в javafx.controls / javafx.scene.control.cell.PropertyValueFactory.call (PropertyValueFactory.java:154) в javafx.controls / javafx.scene.control.cell.PropertyValueFactory.cuej.jj (Property).javafx.controls / javafx.scene.control.TableColumn.getCellObservableValue (TableColumn.java:593) в javafx.controls / javafx.scene.control.TableColumn.getCellObservableValue (TableColumn.javatf. jcont.conf. jcont.conf).TableCell.updateItem (TableCell.java:646) по адресу javafx.controls / javafx.scene.control.TableCell.indexChanged (TableCell.java:469) по адресу javafx.controls / javafx.scene.controlelledjededx:120) по адресу javafx.controls / javafx.scene.control.skin.TableSkinUtils.resizeColumnToFitContent (TableSkinUtils.java:119) по адресу javafx.controls / javafx.scene.control.skin.TableSkinUtils.ofxUtil.tilxUtil.tilSU.controls / javafx.scene.control.skin.TableColumnHeader.doColumnAutoSize (TableColumnHeader.java:573) в javafx.controls / javafx.scene.control.skin.TableColumnHeader.updateava.conf.scene.control.skin.TableColumnHeader.lambda $ new $ 0 (TableColumnHeader.java:159) в javafx.controls / com.sun.javafx.scene.control.LambdaMultiplePropertyChangeListenerHandler.lambda $ new $ 1 (LambdaMultiplePropertyChangeListenerHandler.java:49) в javafx.base / javafx.beans.value.WeakChangeListener.changed (WeakCavab.jjfx.jjf).ExpressionHelper $ SingleChange.fireValueChangedEvent (ExpressionHelper.java:181) в javafx.base / com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent (ExpressionHelper.(ReadOnlyObjectPropertyBase.java:74) по адресу javafx.base / javafx.beans.property.ReadOnlyObjectWrapper.fireValueChangedEvent (ReadOnlyObjectWrapper.java:102) по адресу javafx.graphics/javafue.Over.Wejavafx.graphics/javafx.scene.Node.invalidatedScenes(Node.java:1114) в javafx.graphics/javafx.scene.Node.setScenes(Node.java:1152) в javafx.graphics/javafx.scene.Parent$2.onChanged(Parent.java:369) в javafx.base / com.sun.javafx.collections.TrackableObservableList.lambda $ new $ 0 (TrackableObservableList.java:45) в javafx.base / com.sun.javafx.collections.ListListenerHelper $ Generic.fireValueChangedEvent (ListListenerHel.perf). jB.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent (ListListenerHelper.java:73)в javafx.base / javafx.collections.ObservableListBase.fireChange (ObservableListBase.java:233) в javafx.base / javafx.collections.ListChangeBuilder.commit (ListChangeBuilder.java:482) / jhane.jalf(ListChangeBuilder.java:541) в javafx.base / javafx.collections.ObservableListBase.endChange (ObservableListBase.java:205) в javafx.base / javafx.collections.ModifiableObservableListBasef.base.ObBase.Ollcom.sun.javafx.collections.VetoableListDecorator.setAll (VetoableListDecorator.java:116) в javafx.controls / javafx.scene.control.skin.NestedTableColumnHeader.updateContent (NestedTava.jf) jjcontrol.skin.NestedTableColumnHeader.computePrefHeight (NestedTableColumnHeader.java:345) при javafx.graphics/javafx.scene.Parent.prefHeight(Parent.java:1031) при javafx.graphics/javafx.scene.layout.Region.prefHeight(Region.java:1559) вjavafx.controls / javafx.scene.control.skin.TableHeaderRow.computePrefHeight (TableHeaderRow.java:376) в javafx.controls / javafx.scene.control.skin.TableHeaderRow.computeMavae.graph.jefjavafx.scene.Parent.minHeight (Parent.java:1059) в javafx.graphics/javafx.scene.layout.Region.minHeight(Region.java:1525) в javafx.controls / javafx.scene.control.SkinBase.computein (SkinBase.java:311) в javafx.controls / javafx.scene.control.Control.computeMinHeight (Control.java:512) в javafx.graphics/javafx.scene.Parent.minHeight(Parent.java:1059) в javafx.graphics/javafx.scene.layout.Region.minHeight(Region.java:1525) в javafx.graphics/javafx.scene.layout.Region.computeChildMinAreaHeight(Region.java:1915) в javafx.graphics/javafx.sornelay.getAreaHeight (BorderPane.java:630) на javafx.graphics/javafx.scene.layout.BorderPane.computeMinHeight(BorderPane.java:427) на javafx.graphics/javafx.scene.Parent.minHeight(Parent.java:1059) в javafx.graphics / javafx.scene.layout.Region.minHeight (Region.java:1525) в javafx.graphics/javafx.scene.layout.BorderPane.layoutChildren(BorderPane.java:497) в javafx.graphics/javafx.scene.Parent.layout (Parent.java:1204) в javafx.graphics/javafx.scene.Scene.doLayoutPass(Scene.java:576) в javafx.graphics/javafx.scene.Scene.preferredSize(Scene.java:1748) в javafx.graphics / javafx.scene.Scene $ 2.preferredSize (Scene.java:393) в javafx.graphics/com.sun.javafx.scene.SceneHelper.preferredSize(SceneHelper.java:66) в javafx.graphics/javafx.stage.Window$ 12.invalidated (Window.java:1086) в javafx.base / javafx.beans.property.BooleanPropertyBase.markInvalid (BooleanPropertyBase.java:110) в javafx.base / javafx.beans.property.BooleanPropertyBanper.ProsertyBase.set:145) на javafx.graphics/javafx.stage.Window.setShowing (Window.java:1174) в javafx.graphics/javafx.stage.Window.show(Window.java:1189) в javafx.graphics/javafx.stage.Stage.show(Stage.java:273) в Contact / contactManagement.Main.start (Main.java:16) в javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846) в javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda $ runAndWait $ 12 (PlatformImpl.java:455) в javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428) в java.base / javaContler.doPrivileged (собственный метод) по адресу javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427) по адресу javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run (InvokeLaterDispatcher.java:96)на javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method) на javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)в java.base / java.lang.Thread.run (Thread.java:834) Причина: java.lang.IllegalAccessException: модуль javafx.base не может получить доступ к классу contactManagement.ContactManager.Contact (в модуле Contact), потому что модуль Contact не работаетоткройте contactManagement.ContactManager для javafx.base в javafx.base / com.sun.javafx.property.MethodHelper.invoke (MethodHelper.java:69) в javafx.base / com.sun.javafx.property.PropertyReference.getProperty (свойство свойства).java: 197) ... еще 73
Сейчас я просто пробую firstName. Я думаю, что мой импорт в порядке.