列不再使用JavaFX中的FXML链接到表视图

时间:2015-07-25 21:10:56

标签: javafx controller tableview fxml

我正在创建一个JavaFX程序,并开始使用FXML进行布局。现在我已经使用我想要的布局实现了一个FXML文件,下面的代码片段不再用于设置表列中的值。不知道我在哪里错了。这是我的控制器类的开头。

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

public class Lab8 extends Application {

    public static void main(String[]args){
        launch(args);
    }
    @Override
    public void start(Stage primaryStage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("Lab8Layout.fxml"));
        primaryStage.setTitle("Student Interface");
        primaryStage.setScene(new Scene(root, 700,700));
        primaryStage.show();
    }
}

我的主要课程

public class Student {
    private String firstName;
    private String lastName;
    private String major;
    private double gpa;
    private int uin;
    private int netID = 0;
    private int age;
    private String gender;
    public static int counter = 1;

    public Student(String newFirstName, String newLastName, String newMajor, double newGpa, int newUin, int newAge, String newGender){
        firstName = newFirstName;
        lastName = newLastName;
        setMajor(newMajor);
        setGpa(newGpa);
        setUin(newUin);
        setAge(newAge);
        setGender(newGender);
        netID = counter++;
    }
    public Student(String newFirstName, String newLastName, int newNetID, String newMajor, double newGpa, int newUin, int newAge, String newGender){
        firstName = newFirstName;
        lastName = newLastName;
        setMajor(newMajor);
        setGpa(newGpa);
        setUin(newUin);
        netID = newNetID;
        setAge(newAge);
        setGender(newGender);
        this.netID = counter++;
    }
    public String getFirstName(){
        return firstName;
    }
    public String getLastName(){
        return lastName;
    }
    public int getID(){
        return netID;
    }
    public String getMajor() {
        return major;
    }
    public void setMajor(String major) {
        this.major = major;
    }
    public double getGpa() {
        return gpa;
    }
    public void setGpa(double gpa) {
        this.gpa = gpa;
    }
    public int getUin() {
        return uin;
    }
    public void setUin(int uin) {
        this.uin = uin;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {this.gender = gender; }
}

学生班

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

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

<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Controller">
   <top>
      <VBox BorderPane.alignment="CENTER">
         <children>
            <MenuBar>
              <menus>
                <Menu mnemonicParsing="false" text="File">
                  <items>
                        <MenuItem mnemonicParsing="false" text="Save" />
                        <MenuItem mnemonicParsing="false" text="Load Students" />
                  </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>
            <HBox prefHeight="0.0" prefWidth="595.0">
               <children>
                  <TextField minWidth="80.0" promptText="First Name">
                     <padding>
                        <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
                     </padding>
                     <HBox.margin>
                        <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
                     </HBox.margin>
                  </TextField>
                  <TextField minWidth="80.0" promptText="Last Name">
                     <padding>
                        <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
                     </padding>
                     <opaqueInsets>
                        <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
                     </opaqueInsets>
                     <HBox.margin>
                        <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
                     </HBox.margin>
                  </TextField>
                  <TextField minWidth="80.0" promptText="Major">
                     <padding>
                        <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
                     </padding>
                     <HBox.margin>
                        <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
                     </HBox.margin>
                  </TextField>
                  <TextField minWidth="20.0" promptText="GPA">
                     <padding>
                        <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
                     </padding>
                     <HBox.margin>
                        <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
                     </HBox.margin>
                  </TextField>
                  <TextField promptText="UIN">
                     <HBox.margin>
                        <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
                     </HBox.margin>
                     <padding>
                        <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
                     </padding>
                  </TextField>
                  <TextField minWidth="20.0" promptText="Age">
                     <padding>
                        <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
                     </padding>
                     <HBox.margin>
                        <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
                     </HBox.margin>
                  </TextField>
                  <TextField minWidth="30.0" promptText="Gender">
                     <padding>
                        <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
                     </padding>
                     <HBox.margin>
                        <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
                     </HBox.margin>
                  </TextField>
                  <Pane prefHeight="29.0" prefWidth="97.0" HBox.hgrow="ALWAYS" />
                  <Button minWidth="85.0" mnemonicParsing="false" text="Add Student" HBox.hgrow="ALWAYS" />
               </children>
               <padding>
                  <Insets bottom="3.0" left="3.0" right="3.0" top="3.0" />
               </padding>
               <VBox.margin>
                  <Insets bottom="3.0" left="3.0" right="10.0" top="3.0" />
               </VBox.margin>
            </HBox>
         </children>
      </VBox>
   </top>
   <center>
      <TableView id="studentTable" fx:id="studentTable" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER">
        <columns>
          <TableColumn prefWidth="75.0" text="C1" />
          <TableColumn prefWidth="75.0" text="C2" />
        </columns>
      </TableView>
   </center>
   <bottom>
      <VBox BorderPane.alignment="CENTER">
         <children>
            <HBox spacing="5.0">
               <children>
                  <Button id="deleteButton" mnemonicParsing="false" onAction="#deleteStudent" text="Delete Student" />
               </children>
               <padding>
                  <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
               </padding>
            </HBox>
            <TextField editable="false" text="Status Bar" />
         </children>
      </VBox>
   </bottom>
</BorderPane>

FXML文件

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<select name="dropdown" id="dropdown">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
</select>
<img id="image" src="" />
<script type="text/javascript">
$(function(){
    $( '#dropdown' ).change(function(){
        $( '#image' ).attr( 'src', $( this ).val() + ".png" );
    })
});
</script>

1 个答案:

答案 0 :(得分:0)

您的控制器无效java代码。您的方法体外有声明。您可以阅读更多herehere。在JavaFX控制器中有public void initialize()方法,如果要进行初始化,可以将所有表列设置放在那里。

例如:

public class Controller {
    @FXML public TableView<Student> studentTable;
    ObservableList<Student> studentArray = FXCollections.observableArrayList();

    // can keep column creation here or add them to you FXML
    TableColumn<Student,String> firstNameColumn = new TableColumn<>("First Name");

    // ...

    public void initialize(){
        firstNameColumn.setMinWidth(50); 
        firstNameColumn.setCellValueFactory(new PropertyValueFactory<>("firstName")); 

        // ...

        studentTable.setItems(studentArray); 

        studentTable.getColumns().addAll(firstNameColumn, lastNameColumn,
              majorColumn, gpaColumn,uinColumn, netIDColumn, ageColumn, genderColumn);
    }
}