JavaFXテーブルにデータを追加しようとしています。JavaFXがテーブルにデータを追加する
私はクラスGameOfThronesCharacterを持っています。私はいくつかのインスタンスを作って、データをJavaFXテーブルに挿入しようとしています。
テーブルはFXシーンビルダで作成され、fxmlファイルはメインでリンクされています。 これは練習です。一度この部分を削除すると、GoTCをハードコーディングする代わりに、mysqlテーブルにリンクする予定です。
テーブルは非常に奇妙な動作をしていますが、2番目のテーブルを作成するのが好きです。 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 FXMLファイルで
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彼は変数の前に '@ FXML'を書いていないので、おそらく' null pointer exception'エラーが出ます。どちら、btw OP、あなたはすべきですか? –
@MichaelPickettフィールドが 'public'の場合は、実際には必要ありません(しかし、もちろんprivateでなければなりません)。 –