Как отобразить все строки в Java с помощью JTable? [решено]

#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 за помощь. Извините за поздний ответ. Я уже забыл об этой проблеме.