#java #jtable
#java #jtable
Вопрос:
Я хотел бы спросить, как отобразить все строки в Java с помощью JTable. Я попытался использовать условие while внутри — это result.next(), подлежащий оценке.
Я попытался распечатать его с помощью System.out.println, и он отображает все записи, однако, когда я попробовал это на JTable, он отображает только последнюю строку.
while(results.next()) {
String id = results.getString("id");
String date_collected = results.getString("date_collected");
String date_disposed = results.getString("date_disposed");
String person_in_charged = results.getString("person_in_charged");
String status = results.getString("status");
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][]){
{id, date_collected, date_disposed, person_in_charged, status}
},
new String [] {
"ID", "Date collected", "Date disposed", "person in charged",
"status"
}
));
jScrollPane1.setViewportView(jTable1);
if (jTable1.getColumnModel().getColumnCount() > 0) {
jTable1.getColumnModel().getColumn(0).setResizable(false);
jTable1.getColumnModel().getColumn(1).setResizable(false);
jTable1.getColumnModel().getColumn(2).setResizable(false);
jTable1.getColumnModel().getColumn(3).setResizable(false);
}
}
Вы можете мне помочь? Спасибо!
Краткое описание решения:
Решаемая Усаги Миямото и Айзеком
Решением было создать список таким образом
List<Object[]> data = new ArrayList<>()
Причина:
Список — это интерфейс, абстракция, и его нельзя создать напрямую
ArrayList — это класс, который реализует список
Полное решение Усаги Миямото
// to hold the data
List<Object[]> data = new ArrayList<>();
// loop through the ResultSet
while(results.next())
{
String id = results.getString("id");
String date_collected = results.getString("date_collected");
String date_disposed = results.getString("date_disposed");
String person_in_charged = results.getString("person_in_charged");
String status = results.getString("status");
// add a new row of data
data.add(new Object[] {id, date_collected, date_disposed, person_in_charged, status});
}
// after the loop: set the data as the model
jTable1.setModel(new javax.swing.table.DefaultTableModel(
// convert from List to array
data.toArray(new Object[][data.size()],
// column headers
new String [] { "ID", "Date collected", "Date disposed", "person in charged", "status" }
));
// other details from your code: moved outside of the loop...
jScrollPane1.setViewportView(jTable1);
if (jTable1.getColumnModel().getColumnCount() > 0)
{
jTable1.getColumnModel().getColumn(0).setResizable(false);
jTable1.getColumnModel().getColumn(1).setResizable(false);
jTable1.getColumnModel().getColumn(2).setResizable(false);
jTable1.getColumnModel().getColumn(3).setResizable(false);
}
Ответ №1:
Попробуйте объединить данные, что-то вроде этого:
// to hold the data
List<Object[]> data = new ArrayList<>();
// loop through the ResultSet
while(results.next())
{
String id = results.getString("id");
String date_collected = results.getString("date_collected");
String date_disposed = results.getString("date_disposed");
String person_in_charged = results.getString("person_in_charged");
String status = results.getString("status");
// add a new row of data
data.add(new Object[] {id, date_collected, date_disposed, person_in_charged, status});
}
// after the loop: set the data as the model
jTable1.setModel(new javax.swing.table.DefaultTableModel(
// convert from List to array
data.toArray(new Object[][data.size()],
// column headers
new String [] { "ID", "Date collected", "Date disposed", "person in charged", "status" }
));
// other details from your code: moved outside of the loop...
jScrollPane1.setViewportView(jTable1);
if (jTable1.getColumnModel().getColumnCount() > 0)
{
jTable1.getColumnModel().getColumn(0).setResizable(false);
jTable1.getColumnModel().getColumn(1).setResizable(false);
jTable1.getColumnModel().getColumn(2).setResizable(false);
jTable1.getColumnModel().getColumn(3).setResizable(false);
}
Комментарии:
1. Привет, Усаги, спасибо за ответ. У меня проблема в строке 2 в списке<Object[]> data = new List<>(); мне пришлось импортировать java.util. Не удается создать экземпляр List Ошибка при объявлении «Список абстрактный. Есть ли способ, которым я могу создать экземпляр List?
2. вы должны сделать это: List<Object[]> data = new ArrayList<>(). В Java List — это интерфейс. То есть его нельзя создать напрямую. ArrayList — это класс, который реализует List
3. Спасибо Usagi и issace за помощь
Ответ №2:
DefaultTableModel должна быть создана и установлена вне цикла.
DefaultTableModel model = new DefaultTableModel();
model.addColumn("you column names");
model.addColumn("another column name");
//you can add all your column headers here
JTable table = new JTable();
table.setModel(model);
while(rs.next())
{
String id = results.getString("id");
String date_collected = results.getString("date_collected");
String date_disposed = results.getString("date_disposed");
String person_in_charged = results.getString("person_in_charged");
String status = results.getString("status");
model.addRow(new Object[]{id, date_collected, date_disposed, person_in_charge, status });
}
и продолжайте с остальной частью вашего кода здесь.
Комментарии:
1. Спасибо isaace за помощь. Извините за поздний ответ. Я уже забыл об этой проблеме.