0 0

Swing Jtble 排序后,表格数据无法刷新0

(源代码文件Test.java在最后已附上)
操作描述:
1.添加 -> 刷新
2.点击表头进行排序
3.清空 -> 刷新
4.刷新按钮失效,会报错,如何解决?(如果不点击表头排序,则功能正常)

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
at java.util.Vector.elementAt(Vector.java:470)
at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:649)
at javax.swing.JTable.getValueAt(JTable.java:2720)
at javax.swing.JTable.prepareRenderer(JTable.java:5718)
at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2114)
at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:2016)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1812)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
at javax.swing.JComponent.paintComponent(JComponent.java:778)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JViewport.paint(JViewport.java:731)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)
at javax.swing.RepaintManager.paintDoubleBuffered(RepaintManager.java:1482)
at javax.swing.RepaintManager.paint(RepaintManager.java:1413)
at javax.swing.RepaintManager.paint(RepaintManager.java:1206)
......
2014年5月08日 00:16

4个答案 按时间排序 按投票排序

0 0

采纳的答案

这里有解释,关于JTable模型机制的
http://blog.csdn.net/aptweasel/article/details/7028058

2014年5月08日 18:00
0 0

这个情况我遇到过,我的解决方法是:排序之前把jtable内容设置为空,再调用排序,然后调用显示的。希望你能解决你的问题

2014年5月09日 17:15
0 0

哥哥啊,你这代码完全netbeans拖出来的,都不知道jtable的基本概念,数据直接加到jtable的Model里,不用你管理界面刷新,table有对model的监听,会自己刷

2014年5月09日 09:19
0 0



import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Vector;

public class Test extends javax.swing.JFrame {

private Vector<Vector> tblDate; // 表数据
private Vector<String> tblHeaders; // 表头
private List<Integer> list; // 数据源

public Test() {
    tblDate = new Vector<Vector>();
    tblHeaders = new Vector<String>();
    list = new ArrayList<Integer>();
    tblHeaders.add("编号");
    tblHeaders.add("数据");

    initComponents();
    setLocationRelativeTo(null);
}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
    // 添加
    list.add(list.size());
}

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
    // 清空
    list.clear();
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    // 刷新
    tblDate.clear();

    for (int i : list) {
        tblDate.add(new Vector(Arrays.asList(i, "测试数据" + i)));
    }
    jTable1.setModel(new javax.swing.table.DefaultTableModel(
            this.tblDate, this.tblHeaders
    ));
    jTable1.repaint();
    jTable1.updateUI();
}

// 下面都是NetBeans自动生成代码,不要管
public static void main(String args[]) {
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info
                : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (Exception ex) {
        // TODO
    }

    java.awt.EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            new Test().setVisible(true);
        }
    });
}

@SuppressWarnings("unchecked")
private void initComponents() {
    jScrollPane1 = new javax.swing.JScrollPane();
    jTable1 = new javax.swing.JTable();
    jButton1 = new javax.swing.JButton();
    jButton2 = new javax.swing.JButton();
    jButton3 = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jTable1.setModel(new javax.swing.table.DefaultTableModel(
            this.tblDate, this.tblHeaders
    ));
    jTable1.setAutoCreateRowSorter(true);
    jScrollPane1.setViewportView(jTable1);

    jButton2.setText("添加");
    jButton2.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton2ActionPerformed(evt);
        }
    });

    jButton3.setText("清空");
    jButton3.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton3ActionPerformed(evt);
        }
    });

    jButton1.setText("刷新");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing
    .GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout
                            .Alignment.LEADING)
                            .addComponent(jScrollPane1, javax.swing.GroupLayout
                                    .PREFERRED_SIZE, 0, Short.MAX_VALUE)
                            .addGroup(layout.createSequentialGroup()
                                    .addGap(0, 168, Short.MAX_VALUE)
                                    .addComponent(jButton2)
                                    .addGap(18, 18, 18)
                                    .addComponent(jButton3)
                                    .addGap(18, 18, 18)
                                    .addComponent(jButton1)))
                    .addContainerGap())
    );
    layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jScrollPane1,
                            javax.swing.GroupLayout.DEFAULT_SIZE, 190, Short
                                    .MAX_VALUE)
                    .addGap(18, 18, 18)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout
                            .Alignment.BASELINE)
                            .addComponent(jButton1)
                            .addComponent(jButton2)
                            .addComponent(jButton3))
                    .addContainerGap())
    );

    pack();
}

private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTable jTable1;
}


原因不知道

2014年5月08日 10:34

相关推荐

    java_swing表格分页

    我们可以根据当前页数和最大页数来确定哪些记录应该被显示,并使用 `DefaultTableModel` 来更新表格数据。 结论 本文通过分析给定的代码,探讨了 Java Swing 中的表格分页实现机制。我们了解了 `PageTable` 类的...

    swing演示排序动画

    ### Swing 演示排序动画知识点详解 #### 一、Swing 动画与排序算法演示 本项目通过Swing框架实现了一个动态演示排序过程的应用程序。主要目标是让用户能够直观地看到各种排序算法(例如冒泡排序、插入排序等)在...

    Java Swing实现添加数据并查询数据显示

    在本项目中,"Java Swing实现添加数据并查询数据显示" 涉及到了Java后端与数据库交互以及前端用户界面的构建。 首先,你需要了解如何在Java中连接MySQL数据库。这通常涉及到使用JDBC(Java Database Connectivity)...

    Java Swing实现JTable检测单元格数据变更事件的方法示例

    Java Swing 实现 JTable 检测单元格数据变更事件的方法示例 Java Swing 中的 JTable 是一个功能强大且灵活的表格组件,广泛应用于各种桌面应用程序中。然而,在实际开发中,我们经常需要检测单元格数据的变更事件...

    java swing io 排序的几个小实例

    1. **Swing GUI与用户交互**:通过JButton触发排序操作,JTable展示排序结果,用户可以通过点击按钮触发对数据的排序,更新表格展示。 2. **读取文件**:使用FileInputStream、BufferedReader等类从磁盘读取数据,...

    Swing中JTABLE中添加JBUTTON控件

    在Java的Swing库中,`JTable`是用于创建数据网格视图的重要组件,它允许用户以表格的形式查看和操作数据。而`JButton`则是一个常用的按钮控件,通常用于触发某些动作或事件。将`JButton`添加到`JTable`中可以为用户...

    用Java程序读取Excel表格内容并显示在Swing中

    在Java编程环境中,读取Excel表格内容并将其展示在Swing界面是一项常见的任务,尤其在数据处理和报表展示方面。本篇文章将详细讲解如何实现这一功能。 首先,我们需要引入两个关键库:Apache POI用于读取Excel文件...

    java swing 导出Jtable里面的数据到excel

    java swing 导出Jtable里面的数据到excel,不用拷贝代码,直接粘贴代码

    java的swing表格树示例

    在Swing中,我们可以使用JTable和JTree来创建表格和树形视图,这两个组件可以独立使用,也可以结合在一起,形成一个具有表格和树结构的复杂视图,这在数据展示和操作时非常有用。 **JTable组件** JTable是Swing中...

    swing 合并单元格的表格

    在Java Swing中,创建具有合并单元格功能的表格是一个常见的需求,这有助于增强用户界面的可视化效果和数据呈现。在给定的标题“swing 合并单元格的表格”和描述中,我们可以推断出这是一个关于如何在Swing JTable...

    java Swing Jtable 下拉动态加载数据

    JTable实现下拉动态加载数据,滑动动态加载数据,纯原生态java。

    SWING 表格

    在Swing中,表格(JTable)是展示数据的重要工具,它允许用户查看和编辑二维数据集。这篇博文链接()可能详细讲解了如何在Swing应用中使用JTable来展示数据。 1. **JTable的基本结构**:JTable是一个组件,继承自...

    JavaSwing归并排序动画源码(含其他排序)

    在这个场景中,我们讨论的焦点是使用 Java Swing 来实现一个排序算法的动画展示,特别是归并排序。归并排序是一种高效的、稳定的排序算法,它的基本思想是将大问题分解为小问题来解决,通过递归地将两个或更多有序数...

    Jtable表格分三组排序(支持中文)

    6. **重绘表格**:排序后,你需要调用`JTable.revalidate()`和`JTable.repaint()`来更新视图,显示新的排序结果。 7. **性能优化**:如果数据量大,直接对整个表格进行排序可能会有性能问题。你可以考虑使用懒加载...

    java swing 表头不可拖动

    Swing 提供了丰富的组件集,其中包括JTable,这是一个用于展示表格数据的组件。在Java Swing中,JTable是一个非常重要的组件,它允许用户查看和操作二维数据。然而,有时候我们可能希望禁用JTable的列头拖动功能,...

    Swing表格处理

    总的来说,Swing中的表格处理涉及到对数据的排序以及视觉上的定制,如单元格的背景颜色。通过理解这些基本概念和API,你可以构建出功能丰富且用户友好的数据展示界面。在实际编程中,还需要注意性能优化,尤其是在...

    用Swing实现数据表格功能.rtf

    用Swing实现数据表格功能.rtf 比较的详细,推荐大家下载

    JTable (动态添加数据)

    在Java编程中,`JTable`是Swing组件的一部分,用于在GUI中展示二维表格数据。这个场景中,我们探讨的是如何使用JavaBean来动态地向`JTable`添加数据,并将这些数据保存到Sql Server数据库,然后在`JTable`中显示。...

    数据结构 二叉排序树 java图形界面实现

    总的来说,`BiSortTreeGui.java`文件通过Java Swing库实现了二叉排序树的数据结构,并结合GUI,使得用户可以直观地进行数据的插入、查找和删除操作,这在教学或实践数据结构时非常有帮助。这个项目展示了如何将抽象...

    swing tableModel多列排序实现

    `RowSorter`接口定义了如何对表格数据进行排序。在Swing中,`DefaultRowSorter`是一个常用的实现,它可以处理基于单列的排序。 但是,对于多列排序,我们需要创建一个自定义的`RowSorter`。这通常涉及到扩展`...

Global site tag (gtag.js) - Google Analytics