Заполните таблицу JTable после срабатывания слушателя - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть static List<List<String>> tableValues;, который я хочу записать в JTable после того, как кнопка «enter» запущена, мой список заполнен, так как я новичок в программировании GUI, я не знаю, как я могу создать и заполнить таблицу после событиясрабатывает, и значения JTable изменяются динамически.

    btnEnter.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            String date = textField_3.getText();
            //JTable table = new JTable();
            //JScrollPane tableContainer = new JScrollPane(table);
            try {
                tableValues = Inserts.search(date,3);  //table is filled
                for(List<String> value :  tableValues) {
                    System.out.println(value);
                }
            //table.setVisible(true);
            //panel_7.add(tableContainer, BorderLayout.CENTER); --> I want to add the table to a Panel
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });

1 Ответ

0 голосов
/ 06 января 2019

JTable можно обновить, используя setModel().См. Пример ниже.

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.util.*;

public class UpdateTable {

  public static void main(String[] args) {

    List<List<String>> tableValues = new ArrayList<>();
    tableValues.add(Arrays.asList("value11", "value12", "value13"));
    tableValues.add(Arrays.asList("value21", "value22", "value23"));
    tableValues.add(Arrays.asList("value31", "value32", "value33"));
    tableValues.add(Arrays.asList("value41", "value42", "value43"));

    JTable table = new JTable();

    JButton button = new JButton("enter");
    button.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {

        String[][] data = transform(tableValues);
        String[] columnNames = new String[] {"Column1", "Column2", "Column3"};

        table.setModel(new DefaultTableModel(data, columnNames));
      }
    });

    JFrame f = new JFrame("Update Table");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);
    f.getContentPane().add(button, BorderLayout.SOUTH);
    f.setBounds(300, 200, 400, 300);
    f.setVisible(true);
  }

  private static String[][] transform(List<List<String>> list) {

    String[][] array = new String[4][3];
    for (int i = 0; i < list.size(); i++) {
      for(int j = 0; j < list.get(i).size(); j++) {
        array[i][j] = list.get(i).get(j);
      }
    }
    return array;
  }
}
...