缺少用于在表内显示数据的代码

时间:2016-10-12 15:17:59

标签: java netbeans javafx

目标:
在表格下方显示数据

"Jacob", "Smith", "jacob.smith@example.com"
"Isabella", "Johnson", "isabella.johnson@example.com"
"Ethan", "Williams", "ethan.williams@example.com"
"Emma", "Jones", "emma.jones@example.com"
"Michael", "Brown", "michael.brown@example.com"

问题:
为了在表格中显示数据,我缺少哪些代码?

的信息:

  • 我是JavaFX的新手。
  • 我正在使用netbeans
<?xml version="1.0" encoding="UTF-8"?>

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

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="787.0" prefWidth="1086.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
   <top>
      <MenuBar BorderPane.alignment="CENTER">
        <menus>
          <Menu mnemonicParsing="false" text="File">
            <items>
              <MenuItem mnemonicParsing="false" text="Close" />
            </items>
          </Menu>
          <Menu mnemonicParsing="false" text="Edit">
            <items>
              <MenuItem mnemonicParsing="false" text="Delete" />
            </items>
          </Menu>
          <Menu mnemonicParsing="false" text="Help">
            <items>
              <MenuItem mnemonicParsing="false" text="About" />
            </items>
          </Menu>
        </menus>
      </MenuBar>
   </top>
   <center>
      <TableView id="ttt" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">
        <columns>
          <TableColumn id="firstNameCol" prefWidth="124.0" text="First name" />
          <TableColumn id="lastNameCol" prefWidth="139.0" text="Last name" />
            <TableColumn id="emailCol" minWidth="7.0" prefWidth="197.0" text="Email" />
            <TableColumn id="addressCol" prefWidth="105.0" text="Address" />
            <TableColumn id="zipcodeCol" prefWidth="100.0" text="Zipcode" />
            <TableColumn id="cityCol" prefWidth="204.0" text="City" />
        </columns>
      </TableView>
   </center>
</BorderPane>
package dreamcrm;

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXMLLoader;
import javafx.scene.Group;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.TableView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;


public class DreamCRM extends Application {

    private TableView<Person> table = new TableView<Person>();
    private final ObservableList<Person> data =
        FXCollections.observableArrayList(
            new Person("Jacob", "Smith", "jacob.smith@example.com"),
            new Person("Isabella", "Johnson", "isabella.johnson@example.com"),
            new Person("Ethan", "Williams", "ethan.williams@example.com"),
            new Person("Emma", "Jones", "emma.jones@example.com"),
            new Person("Michael", "Brown", "michael.brown@example.com")
        );    


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

        Scene scene = new Scene(root);

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

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}
package dreamcrm;

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;


public class FXMLDocumentController implements Initializable {

    @FXML
    private Label label;

    @FXML
    private void handleButtonAction(ActionEvent event) {
        System.out.println("You clicked me!");
        label.setText("Hello World!");
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }    

}
package dreamcrm;

import javafx.beans.property.SimpleStringProperty;


public class Person {

    private final SimpleStringProperty firstName;
    private final SimpleStringProperty lastName;
    private final SimpleStringProperty email;

    public Person(String fName, String lName, String email) {
        this.firstName = new SimpleStringProperty(fName);
        this.lastName = new SimpleStringProperty(lName);
        this.email = new SimpleStringProperty(email);
    }

    public String getFirstName() {
        return firstName.get();
    }

    public void setFirstName(String fName) {
        firstName.set(fName);
    }

    public String getLastName() {
        return lastName.get();
    }

    public void setLastName(String fName) {
        lastName.set(fName);
    }

    public String getEmail() {
        return email.get();
    }

    public void setEmail(String fName) {
        email.set(fName);
    }    

}

1 个答案:

答案 0 :(得分:1)

您需要使用fx:id代替idfx:id仍然适用于CSS选择器,所以不用担心。

正如@fabian指出的那样,我错过了,你还需要在你的fxml文件中添加fx:controller,以便它知道将控制它的内容。

在您的文档控制器中,您需要让它知道它是使用@FXML从您的fxml文档中获取一些信息

就像这样,

@FXML
private TableView ttt;
@FXML
private TableColumn<Person, String> firstNameCol, lastNameCol, emailCol,addressCol, zipCol, cityCol;

在这里,您使用fx:id作为变量名称。

然后,在initialize函数中,您需要设置cellValueFactory,就像这样。

@FXML
public void initialize(){
    firstNamecol.setCellValueFactory(cellData -> cellData.getValue().firstNameProperty());
//etc..

//Don't forget to add your list that you made to the tableview
ttt.setItems(list);
}

添加ObservableList后,您现在可以添加和删除项目,并且应该相应地更新。

在相关说明中,您需要将SimpleStringProperty作为可返回值,即

public StringProperty firstNameProperty(){
    return firstName;
}

这应该让你开始。