2016-04-05 3 views
-2

Итак, я знаю, что это распространенная проблема, которая была опубликована много, но насколько я стараюсь следовать приведенному совету, мой TableView пока не отображает данные. .. Я немного уменьшу свой объект, чтобы держать как можно короче. Вот мой объект:Нет содержимого, отображаемого при заполнении 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")); 

Я Добавление элементов ресурса в ObservableList через цикл и установить свои пункты в TableView к этому списку:

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

И ничего не добавлено. Может кто-нибудь помочь мне, пожалуйста?

EDIT: Здесь доступна тестируемая версия. Это требует, чтобы вы создали базу данных ims, таблицу с именем im_resoureitem_br с двумя столбцами: IMItemCode Varchar (4) и IMItemName Varchar (30).

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 (это, «itemCode», код,); это может сработать. Это выглядит по названию свойства, которое вы не установили –

+0

@purringpigeon Нет, он смотрит на него отражением, используя имя метода в классе модели. –

+0

@Brennasyril Я не вижу здесь ничего плохого. Можете ли вы расширить код до [MCVE]. Я думаю, что проблема кроется в другом месте вашего кода. –

ответ

0

Вы создали две таблицы: одна под названием table, которые отображаются в пользовательском интерфейсе, когда вы добавляете его в vbox, а другой называется itemsInDB, которые вы заселить, но никогда не отображается. Поскольку у вас do дисплей не имеет данных, а заполняемая вами таблица никогда не отображается, вы никогда не увидите данные.

У вас возникает другая логическая ошибка при заполнении наблюдаемого списка: вы добавляете один и тот же элемент снова и снова в список и каждый раз обновляете его свойства. Поэтому, если он был отображен, вы увидите один и тот же элемент повторно в таблице.

Могут быть другие ошибки, которые я не заметил, но поскольку вы не создали MCVE, я не могу запустить его и проверить.

+0

Я понял вопрос. В любом случае, спасибо. Извините, я не отформатировал тестовый проект, как вы этого хотели. – Brennasyril

Смежные вопросы