我是JavaFX8的新手,我正在尝试使用initialize方法在控制器中向TableView提供一些数据。我看到了很多关于它的话题,尝试了很多东西,但是对我来说不起作用。
还有很多,但是没有一种解决方案对我有用。
这是我的代码: class Employee
public class Employee extends Person{
private SimpleIntegerProperty salary;
private SimpleObjectProperty<Character> droit;
public Employee(){
super();
this.salary = new SimpleIntegerProperty();
this.droit = new SimpleObjectProperty<Character>();
}
public Employee(int id, String firstName, String lastName, String password, char droits, int salary) {
super(id,firstName,lastName,password);
this.salary = new SimpleIntegerProperty(salary);
this.droit = new SimpleObjectProperty<Character>(droits);
}
public Employee(String firstName, String lastName, String password, char droits, int salary) {
super(firstName,lastName,password);
this.salary = new SimpleIntegerProperty(salary);
this.droit = new SimpleObjectProperty<Character>(droits);
}
...
}
class Person
public class Person {
protected SimpleStringProperty firstName;
protected SimpleStringProperty lastName;
public Person(){
this.firstName = new SimpleStringProperty();
this.lastName = new SimpleStringProperty();
}
public Person(String firstName, String lastName){
this.firstName = new SimpleStringProperty(firstName);
this.lastName = new SimpleStringProperty(lastName);
}
public String getFirstName() {
return firstName.get();
}
public void setFirstName(String firstName) {
this.firstName.set(firstName);
}
public StringProperty firstNameProperty(){
return this.firstName;
}
public String getLastName() {
return this.lastName.get();
}
public void setLastName(String lastName) {
this.lastName.set(lastName);
}
public StringProperty lastNameProperty(){
return this.lastName;
}
这是定义用户界面的FXML:
ConsultHR.fxml
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.ButtonBar?>
<?import javafx.scene.control.DatePicker?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.layout.VBox?>
<?import javafx.scene.text.Font?>
<VBox fx:id="ConsultHR" maxHeight="600.0" maxWidth="600.0" minHeight="500.0" minWidth="500.0" prefHeight="550.0" prefWidth="550.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.kaf.app.controller.hr.ConsultHRController">
<children>
<HBox maxHeight="450.0" minHeight="450.0" prefHeight="450.0">
<children>
<TableView fx:id="table" prefHeight="426.0" prefWidth="288.0">
<columns>
<TableColumn fx:id="lastNameCol" prefWidth="131.0" text="Nom" />
<TableColumn fx:id="firstNameCol" prefWidth="154.0" text="Prénom" />
</columns>
</TableView>
</HBox>
<ButtonBar prefHeight="40.0" prefWidth="400.0">
<buttons>
<Button mnemonicParsing="false" onAction="#goHRAction" text="Rssources Humaines" />
</buttons>
<VBox.margin>
<Insets right="15.0" />
</VBox.margin>
</ButtonBar>
</children>
</VBox>
最后是控制器:类ConsultHRController
public class ConsultHRController extends DefaultController implements Initializable{
@FXML
VBox ConsultHR;
@FXML
public TableView<Employee> table;
@FXML
TableColumn<Employee,String> firstNameCol;
@FXML
TableColumn<Employee,String> lastNameCol;
DAO<Employee> dao;
SimpleListProperty<Employee> employees;
@Override
public void initialize(URL location, ResourceBundle resources){
super.initialize();
dao = (DAO<Employee>) dFact.getEmployeeDAO();
try {
employees = dao.findAll();
System.out.println(employees.get());
table =new TableView<Employee>(employees);
firstNameCol.setCellValueFactory(new PropertyValueFactory<Employee, String>("firstName"));
lastNameCol.setCellValueFactory(new PropertyValueFactory<Employee, String>("lastName"));
table.getColumns().setAll(firstNameCol, lastNameCol);
System.out.println(firstNameCol.getCellData(0));
} catch (SQLException e) {
// TODO Mettre une popup erreur base de données
e.printStackTrace();
}
}
public void goHRAction(ActionEvent e) throws IOException{
goSmwhereAction((Stage) ConsultHR.getScene().getWindow(),"/fr/kaf/app/fxml/hr/HumanRessources.fxml");
}
}
如您所见,我有一个“ System.out.println(firstNameCol.getCellData(0));”
在initialize方法中。结果是给我该单元格不为空,并且其中填充了良好的数据,但是我的UI中什么都看不到。
您可以用方法替换您TableView
的initialize
方法。
table =new TableView<Employee>(employees);
您将数据分配给新数据,并将TableView
从fxml创建的数据留空。
而是使用由注入的一个FXMLLoader
:
@Override
public void initialize(URL location, ResourceBundle resources){
super.initialize();
dao = (DAO<Employee>) dFact.getEmployeeDAO();
try {
employees = dao.findAll();
// set data for the table created by the FXMLLoader
table.setItems(employees);
// no need to add them to the table since the FXMLLoader is ready doing that
firstNameCol.setCellValueFactory(new PropertyValueFactory<>("firstName"));
lastNameCol.setCellValueFactory(new PropertyValueFactory<>("lastName"));
} catch (SQLException e) {
// TODO Mettre une popup erreur base de données
e.printStackTrace();
}
}
null 还有更多,但没有一个解决方案对我有效。 下面是我的代码:类Employee 班人
问题内容: 我正在使用Spring-data- rest在某些JPA实体上提供读取的API。对于写操作,我需要发出Command对象,而不是直接写到DB,因此我添加了一个使用各种命令处理方法的自定义控制器: 我希望输出像spring-data-rest控制器的任何其他响应一样,得到充实,特别是我希望它为自身及其关系添加HATEOAS链接。 问题答案: 最近,Oliver Gierke亲自回答了这个
我被卡住了。我一直在尝试不同的方法将6个头像字符串的结果加载到picturebox控件数组的加载方法中。 这就是我必须迭代(mysql结果集)值字符串到pictureboxes的内容 但是每个图片框都显示为白色(空白)。如果我将SQL查询设置为LIMIT 1,我将为每个图片框获得相同的第一个头像。但它不会相应地分配,或者根本不会。 我如何才能循环到我的6个图片框正确的网址?谢谢你们 编辑 我也尝试
当创建一个应用时,你将会想将多个控件放入一个窗口控件。我们的第一个 helloworld 范例仅仅使用了一个控件,因而我们可以只是简单地调用一个gtk_container_add()将控件填充到一个窗口控件。但是当你想要向窗口控件中放置超过一个控件时,控制每一个控件的位置和大小就变得很重要了。这就是接下来要讲的填充。 GTK+自带了大量各种布局的容器,这些容器的目的是控制被添加到他们的子控件的布局
为什么能起作用?请给我解释一下为什么和怎么做!
问题内容: 我想在调用构造函数时强制用户填写可选参数: 当前,以下代码有效: 我想防止它。我想到了这一点: 不是一个选择,因为我需要使用逗号分隔的args的能力。 有什么好的解决方案可以做到这一点吗?请不要说varargs参数必须是可选的。问题不在于此。 问题答案: 也许下面是一个额外的默认构造函数?