JavaFX:DataView填充操作的奇怪情况

时间:2017-07-14 12:43:00

标签: javafx

我的测试应用程序有一个非常奇怪的问题。我需要用一些数据填充JavaFX TableView元素。这是代码:

fxmldocumentController.java

import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;

import javafx.scene.control.TableView; //A
import javafx.scene.control.TableColumn; //B
import javafx.scene.control.cell.PropertyValueFactory; //C
public class fxmldocumentController implements Initializable 
{

@FXML
private TableView<employees> mainTableView;

@FXML
private TableColumn<employees, Integer> age;

@FXML
private TableColumn<employees, String> userName, companyName;

@Override
public void initialize(URL url, ResourceBundle rb) 
{
  // TODO:
  mainTableView.getItems().
add(new employees("Yuri P. Bodrov", "VMware", 35));
  mainTableView.getItems().
add(new employees("Ivan Y. Bodrov", "VMware", 5));
  mainTableView.getItems().
add(new employees("Peter Y. Bodrov", "VMware", 2));

  // A problem starts here:
  age.setCellValueFactory(new PropertyValueFactory<>("age"));
  userName.setCellValueFactory(new PropertyValueFactory<>("userName"));
  companyName.
setCellValueFactory(new PropertyValueFactory<>("companyName"));


}   

}

fxmldocument.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.text.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane id="AnchorPane" prefHeight="300.0" prefWidth="400.0" style="-fx-
background-color: white;" 
        xmlns="http://javafx.com/javafx/8" 
xmlns:fx="http://javafx.com/fxml/1" 
fx:controller="sampletableviewapp00.fxmldocumentController">
<children>
  <Label fx:id="testLabel" layoutX="14.0" layoutY="14.0" style="-fx-
background-color: white;" text="Employees. TableView." textFill="#505050">
     <font>
        <Font size="14.0" />
     </font>
  </Label>
  <TableView fx:id="mainTableView" layoutX="12.0" layoutY="50.0" 
prefHeight="200.0" prefWidth="377.0">
    <columns>
      <TableColumn prefWidth="90.0" text="UserName" />
      <TableColumn prefWidth="119.0" text="CompanyName" />
      <TableColumn prefWidth="84.0" text="Age" />
    </columns>

  </TableView>
</children>
</AnchorPane>

Sampletableviewapp00.java

package sampletableviewapp00;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Sampletableviewapp00 extends Application 
{

@Override
public void start(Stage stage) throws Exception 
{
  Parent root = FXMLLoader.load(getClass().
getClassLoader().getResource("fxmldocument.fxml"));

Scene scene = new Scene(root);

stage.setScene(scene);
stage.show();
}

public static void main(String[] args) 
{
  launch(args);
}

}

employees.java

package sampletableviewapp00;

public class employees 
{
String userName, companyName;
int age;

// Generate Properties. Getters:
public int GetAge()
{
  return age;
}

public String GetUserName()
{
  return userName;
}

public String GetCompanyName()
{
  return companyName;
}

// Generate Properties. Setters:
public void SetAge(int age)
{
  this.age = age;
}

public void SetUserName(String userName)
{
  this.userName = userName;
}

public void SetCompanyName(String companyName)
{
  this.companyName = companyName;
}

// Generate Constructor of Employees class:
public employees(String userName, String companyName, int age)
{
  this.userName = userName;
  this.companyName = companyName;
  this.age = age;
}

}

当我运行此应用程序时,NetBeans IDE 8.2会返回此堆异常/错误:请参阅outputError.png作为附件

outputError.png

outputError02.PNG

亲爱的同事们!您有什么想法来解决这个问题吗?您可以尝试自己编写此代码并运行吗?提前致谢! : - )

2 个答案:

答案 0 :(得分:1)

您有 fxmldocument.xml ,但尝试加载“ fxmldocument.fxml ”。 将文件重命名为fxml扩展名。

还要确保将fxml文件放在/ resources / yourpackagepath /文件夹下并加载为:

Sampletableviewapp00.class.getResource("fxmldocument.fxml")

答案 1 :(得分:0)

此行触发异常:

Parent root = FXMLLoader.load(getClass().
getClassLoader().getResource("fxmldocument.fxml"));

您的fxml文档的扩展名是项目中的xml,并且您尝试将其加载为上述行中的.fxml。

fxmldocument.xml 重命名为 fxmldocument.fxml