Swing Jtable使用新数据刷新 我有一个加载按钮,它将数据加载到jtable中 我能够将新数据加载到jtable

Swing Jtable使用新数据刷新 我有一个加载按钮,它将数据加载到jtable中 我能够将新数据加载到jtable,swing,jtable,jcheckbox,Swing,Jtable,Jcheckbox,但是当我重新加载数据并单击jcheckbox时,旧数据就会出现。 我使用的是defaulttablemodel选项。 请运行程序,并帮助我哪里出了问题 import java.awt.BorderLayout; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.sw

但是当我重新加载数据并单击jcheckbox时,旧数据就会出现。 我使用的是defaulttablemodel选项。 请运行程序,并帮助我哪里出了问题

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class MainWindow extends JFrame {
JTable table;
private static final int CHECK_COL = 3;
    String[] columnNames = {
    "Country", "Capital", "Population in Millions", "Democracy"};
    Object[][] data = {
    {"USA", "Washington DC", 280, false},
    {"Canada", "Ottawa", 32, false},
    {"United Kingdom", "London", 60, false},
    {"Germany", "Berlin", 83, false},
    {"France", "Paris", 60, false},
    {"Norway", "Oslo", 4.5, false},
    {"India", "New Deli", 1046, false}
    };
    DefaultTableModel dtm ;
    // static JScrollPane scrollpane= new JScrollPane();
    public MainWindow() {
    setTitle("Marking of data");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     JButton button1 = new JButton("load");
    button1.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        if(dtm!=null){
            System .out .println("NOT EMPTY");
            int c = dtm.getRowCount();
        // for (int i=c-1; i>=0; i--)
        // {
            // dtm.removeRow(i);
            // table.revalidate();
        // }
            loadtable();
             }
        if(dtm==null){
            System .out .println("EMPTY");
            loadtable();
        }
      }
      });

      JButton button = new JButton("check");
      button.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
        for (int row = 0; row < table.getRowCount(); row++) {
            Boolean b = ((Boolean) table.getValueAt(row, CHECK_COL));
            if (b.booleanValue()) {
                System.out.print("row " + row + " is " + b + ": ");
                for (int col = 0; col < table.getColumnCount(); col++) {
                    System.out.print(table.getValueAt(row, col) + " ");
                }
                System.out.println();
            }
        }
      }
      });
      JPanel buttonpanel1 = new JPanel();
      buttonpanel1.add(button1);
      JPanel buttonpanel = new JPanel();
      buttonpanel.add(button);
      add(buttonpanel, BorderLayout.SOUTH);
      add(buttonpanel1, BorderLayout.NORTH);
      pack();
      setLocationByPlatform(true);
      setVisible(true);
      }
      public void loadtable(){
    dtm = new DefaultTableModel(data, columnNames) {
        @Override
        public Class getColumnClass(int col) {
            return getValueAt(0, col).getClass();
        }
        @Override
        public boolean isCellEditable(int rowIndex, int colIndex) {
            return (colIndex == CHECK_COL);
        }
      };
      table = new JTable(dtm);
      JScrollPane scrollpane = new JScrollPane(table);
      add(scrollpane, BorderLayout.CENTER);
      pack();
      setVisible(true);
      }


     public static void main(String args[]) {
     EventQueue.invokeLater(new Runnable() {
     @Override
     public void run() {
        new MainWindow();
      }
     });
     }
      }
导入java.awt.BorderLayout;
导入java.awt.EventQueue;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JButton;
导入javax.swing.JComponent;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
导入javax.swing.table.DefaultTableModel;
公共类主窗口扩展JFrame{
JTable表;
专用静态最终整数检查\u COL=3;
字符串[]列名称={
“国家”、“首都”、“百万人口”、“民主”};
对象[][]数据={
{“美国”,“华盛顿特区”,280,假},
{“加拿大”、“渥太华”,32,假},
{“联合王国”、“伦敦”,60,假},
{“德国”、“柏林”,83,假},
{“法国”,“巴黎”,60,假},
{“挪威”、“奥斯陆”,4.5,假},
{“印度”,“新熟食店”,1046,假}
};
数字地面模型;
//静态JScrollPane scrollpane=新的JScrollPane();
公共主窗口(){
setTitle(“数据标记”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton button1=新JButton(“加载”);
button1.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件e){
如果(dtm!=null){
System.out.println(“非空”);
int c=dtm.getRowCount();
//对于(int i=c-1;i>=0;i--)
// {
//dtm.removeRow(i);
//表.重新验证();
// }
loadtable();
}
如果(dtm==null){
System.out.println(“空”);
loadtable();
}
}
});
JButton按钮=新JButton(“检查”);
addActionListener(新建ActionListener()){
@凌驾
已执行的公共无效操作(操作事件e){
对于(int row=0;row

需要帮助。pls

默认表格模型将数据从二维数组复制到其自身的向量中

每次按“加载”按钮时,都会使用相同的数据创建一个新的默认表格模型,并对新表格模型的向量进行新的复制

每次按下“加载”按钮时,您的代码都会重置表格模型,因此当然会显示旧数据