2016-12-23 18 views
0

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; 
    }  
} 
+0

なぜあなたは、コントローラ内の列の全体の新しいセットを作成し、それらを追加します表? –

+0

@James_D彼は変数の前に '@ FXML'を書いていないので、おそらく' null pointer exception'エラーが出ます。どちら、btw OP、あなたはすべきですか? –

+1

@MichaelPickettフィールドが 'public'の場合は、実際には必要ありません(しかし、もちろんprivateでなければなりません)。 –

答えて

1

、あなたは表の列を作成し、テーブルのcolumnsリストに追加:

<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> 

そして、コントローラで、あなたは全く新しいを作成します列のセット、およびテーブルのcolumnsリストにすべてのそれらを追加します。

@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); 

} 

したがって、意外なことに、重複した列のセットになります。

2番目の列セットを作成するコードを削除するだけです。 (余談として、それは彼らに@FXMLに注釈を付けることにより、フィールドは公開すること、およびFXMLLoaderに彼らがアクセスできるようにする方が良いでしょう):

public class FrontEndController implements Initializable { 

    @FXML private TableView<GameOfThronesCharacter> table; 
    @FXML private TableColumn<GameOfThronesCharacter,String> nameColumn; 
    @FXML private TableColumn<GameOfThronesCharacter,String> allegianceColumn; 
    @FXML private TableColumn<GameOfThronesCharacter,String> positionColumn; 
    @FXML private 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.setCellValueFactory(new PropertyValueFactory<>("name")); 

     //allegianceColumn 
     allegianceColumn.setCellValueFactory(new PropertyValueFactory<>("allegiance")); 

     //positionColumn 
     positionColumn.setCellValueFactory(new PropertyValueFactory<>("position")); 

     //salaryColumn 
     salaryColumn.setCellValueFactory(new PropertyValueFactory<>("salary")); 

     //table = new TableView<>(); 
     table.setItems(getCharacters()); 

    } 
} 
+0

Jamesさんが私の問題などを解決しました。私はFXMLアノテーションについて正直であることを知らなかったし、通常は物事を公開した。私は自己学習のようなものです、そして、私はかなりここで少し逃しています、良い先生の助けを感謝! – CoderP

関連する問題