Jtable 用新数据刷新

发布于 2025-01-03 08:29:54 字数 2965 浏览 0 评论 0原文

  1. 我有加载按钮,可将数据加载到 jtable
  2. 我能够将新数据加载到 jtable
  3. 但是当我重新加载数据并单击 jcheckbox 时,旧数据就会出现。 我正在使用 defaulttablemodel 选项。 请运行程序并帮助我解决出错的地方。

    导入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;
    
    公共类 MainWindow 扩展 JFrame {
    JTable表;
    私有静态最终 int CHECK_COL = 3;
        字符串[] 列名 = {
        “国家”、“首都”、“百万人口”、“民主”};
        对象[][]数据 = {
        {“美国”,“华盛顿特区”,280,假},
        {“加拿大”,“渥太华”,32,假},
        {"英国","伦敦", 60, false},
        {“德国”,“柏林”,83,错误},
        {“法国”,“巴黎”,60,假},
        {"挪威", "奥斯陆", 4.5, false},
        {“印度”,“新熟食店”,1046,假}
        };
        默认表模型 dtm ;
        // 静态 JScrollPane 滚动窗格= new JScrollPane();
        公共主窗口(){
        setTitle("数据标记");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         JButton 按钮1 = new JButton("加载");
        Button1.addActionListener(new ActionListener() {
        公共无效actionPerformed(ActionEvent e){
            如果(dtm!= null){
                System .out .println("非空");
                int c = dtm.getRowCount();
            // for (int i=c-1; i>=0; i--)
            // {
                // dtm.removeRow(i);
                // 表.revalidate();
            // }
                加载表();
                 }
            如果(dtm==null){
                System .out .println("空");
                加载表();
            }
          }
          });
    
          JButton 按钮 = new JButton("检查");
          按钮.addActionListener(new ActionListener() {
          @覆盖
          公共无效actionPerformed(ActionEvent e){
            for (int row = 0; row < table.getRowCount(); row++) {
                布尔 b = ((布尔) table.getValueAt(row, CHECK_COL));
                if (b.booleanValue()) {
                    System.out.print("row " + row + " 是 " + b + ": ");
                    for (int col = 0; col < table.getColumnCount(); col++) {
                        System.out.print(table.getValueAt(row, col) + " ");
                    }
                    System.out.println();
                }
            }
          }
          });
          JPanel 按钮面板1 = new JPanel();
          按钮面板1.add(按钮1);
          JPanel 按钮面板 = new JPanel();
          按钮面板.add(按钮);
          添加(按钮面板,BorderLayout.SOUTH);
          添加(按钮面板1,BorderLayout.NORTH);
          盒();
          setLocationByPlatform(真);
          设置可见(真);
          }
          公共无效加载表(){
        dtm = new DefaultTableModel(数据, 列名) {
            @覆盖
            公共类 getColumnClass(int col) {
                返回 getValueAt(0, col).getClass();
            }
            @覆盖
            公共布尔 isCellEditable(int rowIndex, int colIndex) {
                返回(colIndex == CHECK_COL);
            }
          };
          表 = 新 JTable(dtm);
          JScrollPane 滚动窗格 = new JScrollPane(table);
          添加(滚动窗格,BorderLayout.CENTER);
          盒();
          设置可见(真);
          }
    
    
         公共静态无效主(字符串参数[]){
         EventQueue.invokeLater(new Runnable() {
         @覆盖
         公共无效运行(){
            新的主窗口();
          }
         });
         }
          }
    

需要帮助。请

  1. I have load button which loads the data into jtable
  2. I am able to load new data to jtable.
  3. but when I reload the data and click jcheckbox, the old data comes up.
    I am using defaulttablemodel option.
    pls run the prog and help me where i have gone wrong.

    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();
          }
         });
         }
          }
    

help needed. pls

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

巨坚强 2025-01-10 08:29:54

默认表模型将数据从二维数组复制到它自己的向量中。

每次按下加载按钮时,都会使用相同的数据创建一个新的默认表模型,并为新表模型的向量创建一个新副本。

每次按下加载按钮时,您的代码都会重置表模型,因此当然会出现旧数据。

The default table model copies the data from the two-dimensional array into its own vectors.

Each time you press the load button, you create a new default table model using the same data, and a new copy is made to the new table model's vectors.

Your code resets the table model each time the load button is pressed, so of course, the old data comes up.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文