2016-04-05 2 views
-2

これは一般的な問題ですが、私のアドバイスに従う限り、TableViewはデータを表示しません。私は物事をできるだけ短く保つために少しは減らします。ここに私のオブジェクトは、次のとおりです。私はこのtableColumnsを作成する場所TableViewにオブジェクトの属性を設定したときに表示されるコンテンツがありません

public SimpleStringProperty itemCode, itemName; 

public ResourceItem(String code, String name) { 
    this.itemCode = new SimpleStringProperty(code); 
    this.itemName = new SimpleStringProperty(name); 
} 

public String getItemCode() { 
    return itemCode.get(); 
} 

public void setItemCode(String code) { 
    itemCode.set(code); 
} 

public SimpleStringProperty itemCodeProperty() { 
    return itemCode; 
} 

public SimpleStringProperty itemNameProperty() { 
    return itemName; 
} 

public String getItemName() { 
    return itemName.get(); 
} 

public void setItemName(String name) { 
    itemName.set(name); 
} 

そして、ここでは、次のとおりです。

TableColumn<ResourceItem, String> code = new TableColumn("Item Code"); 
code.setCellValueFactory(new PropertyValueFactory("itemCode")); 
TableColumn<ResourceItem, String> code = new TableColumn("Item Name"); 
name.setCellValueFactory(new PropertyValueFactory("itemName")); 

私はforループを通じてObservableListへのリソースの項目を追加し、そのリストにテーブルビューの私の項目を設定します。

ObservableList<ResourceItem> data = FXCollections.observableArrayList(); 
.... 
itemsInDB.setItems(data); 
itemsInDB.getColumns().addAll(code, name); 

そして、何も追加されません。誰かが私を助けてくれますか?

編集: テスト可能なバージョンです。 IMItemCode Varchar(4)とIMItemName Varchar(30)の2つのカラムを持つim_resoureitem_brというテーブルimsというデータベースを設定する必要があります。

public class TableViewTest extends Application { 

final String DRIVER = "com.mysql.jdbc.Driver"; 
String urlHead = "jdbc:mysql://localhost/ims"; 

final String USER = "root"; 
final String PASS = ""; 

Connection connection; 
Statement statement; 

private TableView<ResourceItem> table = new TableView<ResourceItem>(); //creates table to hold Course objects 
private final ObservableList<ResourceItem> data 
     = FXCollections.observableArrayList(); 

@Override 
public void start(Stage stage) throws ClassNotFoundException { 
    Scene scene = new Scene(new Group()); 
    stage.setTitle("Fall 2015 Schedule"); //title of stage, appears at top bar 
    stage.setWidth(700); 
    stage.setHeight(500); 

    final Label label = new Label("Brenna Morss-Fish Fall Schedule 2015"); 

    table.setEditable(true); 

    table.setItems(data); //sets rows of table as data from course arraylist 
    TableColumn<ResourceItem, String> code = new TableColumn<ResourceItem, String>("Code:");//creates first column 
    code.setMinWidth(100); 
    code.setCellValueFactory(
      new PropertyValueFactory("itemCode")); 
    TableColumn<ResourceItem, String> name = new TableColumn<ResourceItem, String>("Name:");//creates first column 
    name.setMinWidth(100); 
    name.setCellValueFactory(
      new PropertyValueFactory("itemName")); //defines what column holds according to name field of Course class 

    String query = "select * from ims.im_resourceItem_br; "; 
    ArrayList<String[]> items = new ArrayList<String[]>(); 

    TableView<ResourceItem> itemsInDB = new TableView(); 
    items = getQueryResult(query); 
    //itemsInDB.setEditable(false); 
    ResourceItem item = new ResourceItem("", ""); 
    ObservableList<ResourceItem> data = FXCollections.observableArrayList(); 
    data.removeAll(data); 
    //System.out.println(items.get(0).toString()); 
    for (int i = 0; i < items.size(); i++) { 
     item.setItemCode(items.get(i)[1]); 
     item.setItemName(items.get(i)[2]); 
     data.add(item); 
    } 

    code.setCellValueFactory(new PropertyValueFactory("itemCode")); 
    name.setCellValueFactory(new PropertyValueFactory("itemName")); 

    itemsInDB.setItems(data); 

    System.out.println(itemsInDB.getItems()); 

    itemsInDB.getColumns().addAll(code, name); 

    table.getColumns().addAll(code, name); 
    //adds previously defined columns to the table in the order they will appear 
    final VBox vbox = new VBox(); 
    vbox.setSpacing(5); 
    vbox.getChildren().addAll(label, table); //adds label and course table to VBox layout container 

    ((Group) scene.getRoot()).getChildren().addAll(vbox); 

    stage.setScene(scene); //adds scene to the stage 
    stage.show(); //displays stage 
} 

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    launch(args); 
} 

public ArrayList getQueryResult(String stmt) throws ClassNotFoundException { 
    String results = ""; 
    ResultSet resultSet = null; 
    String row = ""; 
    ArrayList<String[]> list = new ArrayList<String[]>(); 
    try { 

     Class.forName(DRIVER); 
     connection = DriverManager.getConnection(urlHead, USER, PASS); 
     statement = connection.createStatement(); 
     resultSet = statement.executeQuery(stmt); 

     int columnCount = resultSet.getMetaData().getColumnCount(); 

     while (resultSet.next()) { 
      String delims = "[%]"; 
      row = ""; 
      for (int i = 1; i <= columnCount; i++) { 
       row += resultSet.getString(i) + "%"; 
      } 
      String[] array = row.split(delims); 

      list.add(array); 
     } 

    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    return list; 
} 

public static class ResourceItem { 

    public SimpleStringProperty itemCode, itemName; 

    public ResourceItem(String code, String name) { 
     this.itemCode = new SimpleStringProperty(code); 
     this.itemName = new SimpleStringProperty(name); 
    } 

    public String getItemCode() { 
     return itemCode.get(); 
    } 

    public void setItemCode(String code) { 
     itemCode.set(code); 
    } 

    public SimpleStringProperty itemCodeProperty() { 
     return itemCode; 
    } 

    public SimpleStringProperty itemNameProperty() { 

     return itemName; 
    } 

    public String getItemName() { 
     return itemName.get(); 
    } 

    public void setItemName(String name) { 
     itemName.set(name); 
    } 

public String toString() { 
    String print = itemCode + " " + itemName + " "; 

    return print; 
} 
} 

}

+0

私は構文を使用していませんが、これを変更すると信じています:this.itemCode = new SimpleStringProperty(code);これは:this.itemCode = new SimpleStringProperty(this、 "itemCode"、code、);それはうまくいくかもしれない。それはあなたが設定していないプロパティ名でそれを探しています –

+0

@purringpigeonいいえ、それはモデルクラスのメソッド名を使用して、反射でそれを探しています。 –

+0

@Brennasyril私はここで何か間違って見ることはできません。コードを[MCVE]に展開できますか?私は問題があなたのコードのどこかにあると思う。 –

答えて

0

次の2つのテーブルを作成している:1をあなたがvboxに追加するときに、UIに表示され、tableと呼ばれ、もう一つはitemsInDBと呼ばれる、あなたが移入されますが表示されません。テーブルにはディスプレイにデータがないため、表示されるテーブルは決して表示されません。データは表示されません。

観察可能リストを作成するときに別の論理エラーが発生します。リストに同じ項目を繰り返し追加し、そのプロパティを毎回更新します。したがって、表示されている場合は、同じ項目がテーブルに繰り返し表示されます。

私が気づいていない他のエラーがあるかもしれませんが、あなたがMCVEを作成していないので、実際に実行してテストすることはできません。

+0

私は問題を理解しました。とにかくありがとうございました。申し訳ありませんが、私はあなたが望む方法でテストプロジェクトをフォーマットしませんでした。 – Brennasyril

関連する問題