我正在创建一个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>
答案 0 :(得分:0)
您的控制器无效java代码。您的方法体外有声明。您可以阅读更多here或here。在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);
}
}