#java #user-interface #jtable
#java — язык #пользовательский интерфейс #jtable #java
Вопрос:
String[] columnNames = {"Type", "Employee ID", "First/Last Name","DOB", "Gender", "HIre Date", "OnCall", "BaseSalary", "Commission/Hourly Rate"};
Object[][] data = new Object[10][9];
table = new JTable(data,columnNames);
public ArrayList<Person> employeeList = new ArrayList<Person>();
public ArrayList<Client> clientList = new ArrayList<Client>();
public ArrayList<Stock> stockList = new ArrayList<Stock>();
Я пытаюсь создать JTable с информацией внутри array-list. Я попробовал что-то вроде.
data[0][0] = "Account";
data[0][1] = 1; //int
data[0][2] = "Name";
data[0][3] = dob; //Date class
data[0][4] = gender; //Enum
data[0][5] = hire //Date class
data[0][6] = true; //boolean
data[0][7] = 125.23; //double
data[0][8] = 0.015; //double
Что получилось не очень хорошо, я пробую Google, но большинство примеров содержат готовые массивы, так что это не сильно помогло.
Комментарии:
1. Неясно, почему это не сработало, чего вы ожидали и что произошло вместо этого?
2. На самом деле я ожидал, что это сработает, но, по-видимому, этого не произошло, поскольку код, с которым я работаю у предыдущего пользователя, обработал исключение и выдал ошибку
3. Как ни странно, теперь я создаю таблицу, в которую вообще не поступает никаких данных…
4. Помещаете ли вы объекты в data перед созданием JTable?
5. Да, в чем, я думаю, может быть проблема, в итоге я просто создал пустую таблицу и просто добавил строки, которые кажутся более простыми.
Ответ №1:
Я думаю, что ваша проблема связана с массивом данных. Массивы в Java не являются динамическими. Определение
Object[][] data = {};
вы создаете массив длиной 0.
Вы должны были бы знать их длины заранее и использовать их при создании или использовать метод toArray списка.
Комментарии:
1. могу ли я указать размер, такой как данные Object [row] [col];
2. Нет.
Object[][] data = new Object[rows][cols];
Ответ №2:
Документация по модели JTable сбивает с толку своими упрощенными объяснениями. Передача данных в конструктор таблиц почти всегда является ошибкой. Вы должны реализовать свою собственную табличную модель, которая является производной от AbstractTableModel, и передать этот объект модели в конструктор для таблицы.
Тогда ваша табличная модель может иметь просто закрытую переменную-член, например
public ArrayList<Person> employeeList = new ArrayList<Person>();
затем вам просто нужно реализовать несколько методов, таких как
public int getRowCount() {
return emplyeeList.size();
}
и такие как
public Object getValueAt(int rowIndex, int columnIndex) {
Person p = employeeList.get(rowIndex);
switch (columnIndex) {
case 1:
return p.getName();
....
}
}
и т.д.
Это значительно упрощает ваше программирование, поскольку модель использует ваши естественные структуры данных для хранения данных.