触发动作侦听器后填充JTable

时间:2018-12-11 12:37:46

标签: java user-interface jframe jtable actionlistener

我有一个s,我想在触发按钮“ enter”后写在JTable中,因为我是GUI编程的新手,所以我的列表已满,我不知道如何在创建后填充表格事件被触发,并且JTable值动态变化。

t'

1 个答案:

答案 0 :(得分:0)

可以使用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;
  }
}