Я пытаюсь добавить данные в таблицу JavaFX.JavaFX добавить данные в таблицу
У меня есть класс GameOfThronesCharacter. Я сделал несколько экземпляров, и я пытаюсь вставить эти данные в таблицу JavaFX.
Таблица была сделана в FX scenbuilder, а файл fxml связан в основном. Это практика, я планирую связать ее с таблицей mysql вместо hardcoding GoTCs, когда я получу эту часть.
Таблица действует очень странно и, как создание второго стола. https://youtu.be/1JVraOXVPIk
Я не знаю, что я испортил, кто-нибудь может мне помочь? вот код:
Main.java
public class Main extends Application {
static Stage window;
static Scene FrontEnd;
@Override
public void start(Stage primaryStage)throws IOException {
window = primaryStage;
initialize();
window.setTitle("Database Interface v1.0");
window.setResizable(true);
window.setScene(FrontEnd);
window.show();
}
private void initialize() throws IOException {
FrontEnd = new Scene(FXMLLoader.load(getClass().getResource("Frontend.fxml")));
FrontEnd.getStylesheets().add("application.css");
}
public static void main(String[] args) {
launch(args);
}
}
FrontEnd.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<Pane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.FrontEndController">
<children>
<TableView fx:id="table">
<columns>
<TableColumn fx:id="deletionColumn" editable="false" prefWidth="75.0" text="Delete" />
<TableColumn fx:id="nameColumn" editable="false" prefWidth="75.0" text="Name" />
<TableColumn fx:id="allegianceColumn" editable="false" prefWidth="75.0" text="Allegiance" />
<TableColumn fx:id="positionColumn" editable="false" prefWidth="75.0" text="Position" />
<TableColumn fx:id="salaryColumn" editable="false" prefWidth="75.0" text="Salary" />
</columns>
</TableView>
</children>
</Pane>
FrontEndController.java
public class FrontEndController implements Initializable {
public TableView<GameOfThronesCharacter> table;
public TableColumn<GameOfThronesCharacter,String> nameColumn;
public TableColumn<GameOfThronesCharacter,String> allegianceColumn;
public TableColumn<GameOfThronesCharacter,String> positionColumn;
public TableColumn<GameOfThronesCharacter,Double> salaryColumn;
private ObservableList<GameOfThronesCharacter> getCharacters(){
ObservableList<GameOfThronesCharacter> characters = FXCollections.observableArrayList();
characters.add(new GameOfThronesCharacter("Cersei","Lannister","Queen Regent",100000));
characters.add(new GameOfThronesCharacter("Jaime","Lannister","King Slayer",80000));
characters.add(new GameOfThronesCharacter("Tyrion","Lannister","Queen's Hand",60000));
return characters;
}
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
//nameColumn
nameColumn = new TableColumn<>("Name");
nameColumn.setCellValueFactory(new PropertyValueFactory<>("name"));
//allegianceColumn
allegianceColumn = new TableColumn<>("Allegiance");
allegianceColumn.setCellValueFactory(new PropertyValueFactory<>("allegiance"));
//positionColumn
positionColumn = new TableColumn<>("Position");
positionColumn.setCellValueFactory(new PropertyValueFactory<>("position"));
//salaryColumn
salaryColumn = new TableColumn<>("Salary");
salaryColumn.setCellValueFactory(new PropertyValueFactory<>("salary"));
//table = new TableView<>();
table.setItems(getCharacters());
table.getColumns().addAll(nameColumn,allegianceColumn,positionColumn,salaryColumn);
}
}
GameOfThronesCharacter.java
public class GameOfThronesCharacter {
private String name;
private String allegiance;
private String position;
private double salary;
public GameOfThronesCharacter(){
}
public GameOfThronesCharacter(String name, String allegiance, String position, double salary){
setName(name);
setAllegiance(allegiance);
setPosition(position);
setSalary(salary);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAllegiance() {
return allegiance;
}
public void setAllegiance (String allegiance){
this.allegiance = allegiance;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
Почему вы создаете новый набор столбцов в контроллере и добавить их к Таблица? –
@James_D Вероятно, он получил ошибку «null pointer exception», так как он не предисловил ни одну из своих переменных с помощью '@ FXML'. Который, btw OP, вы должны сделать. –
@MichaelPickett Вам действительно не нужно, если поля являются 'public' (хотя они должны, конечно, быть' private'). –