-2

わかりましたので、これはよく投稿されている一般的な問題であることはわかっていますが、与えられたアドバイスに従おうとしている限り、私の 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);
}

ここで TableColumns を作成します。

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 に追加し、TableView のアイテムをそのリストに設定します。

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

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

編集: これはテスト可能なバージョンです。IMItemCode Varchar(4) と IMItemName Varchar(30) の 2 つの列を持つ ims というデータベースと、im_resouritem_br というテーブルをセットアップする必要があります。

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

}

4

1 に答える 1

0

2 つのテーブルを作成しました。1 つはtableに追加するときに UI に表示するという名前のテーブルで、vboxもう1 つは という名前のテーブルでitemsInDB、入力しても表示されません。表示するテーブルにはデータが含まれておらず、入力したテーブルは表示されないため、データは表示されません。

監視可能なリストにデータを入力するときに、別の論理エラーがあります。同じ項目を何度もリストに追加し、そのたびにそのプロパティを更新します。そのため、表示された場合、同じアイテムがテーブルに繰り返し表示されます。

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

于 2016-04-05T22:42:28.867 に答える