Swing Jtble 排序后,出现数据刷新问题
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$PaintManager.paintDoubleBuffered(RepaintManager.java:1482)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1413)
at javax.swing.RepaintManager.paint(RepaintManager.java:1206)
......
整个测试代码文件如下:
Test.java:
package examples;
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.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;
}
相关推荐
JAVA JTREE JTABLE实例代码
JTable是Swing中的另一个重要组件,用于显示和编辑表格数据。它可以处理各种类型的列,如文本、数字、日期等,并且支持排序、选择和编辑功能。
jtable列中自定义button示例代码
在Java Swing应用中,JTable是一个非常常用的组件,用于展示二维数据表格。有时,我们可能需要在JTable的某一列中添加自定义的按钮,以便为用户提供更多的交互功能。
YOLO26算法工业车间与城市道路安全标识及交通标志目标检测+训练好的模型+260张数据集+pyqt可视化界面.zip
附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[安全标识(safety), 交通标志(traffic)] · 训练集:240 张 · 验证集:10 张 · 测试集:10 张 · 总计:260 张 该数据集精准聚焦于工业生产环境与城市道路交通场景,旨在为高危作业区域的安全警示系统及道路通行管理提供可靠视觉识别支持。通过采集真实工作现场与道路环境中的关键标识,该数据集有效支撑了对人员行为规范提示与交通状态预警的自动化感知需求,具备显著的工程实用价值与行业落地潜力。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 67 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.7278** mAP50-95 | 0.6630 Precision | 0.7294 Recall | 0.7273 train/box_loss | 0.7483 train/cls_loss | 0.6857 val/box_loss | 0.6823 val/cls_loss | 1.8035 【训练过程分析】 67 轮训练后 mAP50 为 0.7278,模型基本收敛但还有提升余地。Loss 曲线下降正常,后期趋于平缓。mAP50-95 为 0.6630,定位精度尚可。 【模型性能评估】 Precision 0.7294、Recall 0.7273,精度高于召回,存在一定漏检。多类检测中,不同类别性能可能有差异,需关注... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。
技术转移机构如何基于数据提升项目撮合精准度?.docx
技术转移机构如何基于数据提升项目撮合精准度?
IEEE基于高频信号注入法的PMSM零低速无位置控制永磁同步电机仿真,有参考文献
内容概要:本文围绕基于高频信号注入法的永磁同步电机(PMSM)在零低速工况下的无位置传感器控制技术开展系统性仿真研究,重点聚焦旋转高频信号注入法的应用。通过Matlab/Simulink平台构建完整的控制系统仿真模型,深入分析了高频电压信号注入后电机凸极效应引起的响应电流特征,进而设计并实现了基于信号调制与解调、滤波处理及位置估计算法的位置观测器。研究有效解决了传统机械式位置传感器在极低速或零速运行时难以精确检测转子位置的问题,提升了系统可靠性与鲁棒性。全文涵盖信号注入策略、高频响应信号处理流程、转子位置估算原理、误差补偿机制以及仿真验证等关键技术环节,并配有详实的参考文献,具备较强的理论深度与工程实践价值。; 适合人群:从事电机驱动控制、电力电子与电力传动、自动化及相关领域的科研人员、高校研究生,以及具备一定Matlab/Simulink仿真能力和电机控制理论基础的工程技术人员。; 使用场景及目标:①用于永磁同步电机无传感器控制算法的教学演示与科研仿真;②为低速高精度伺服系统、新能源汽车电驱动系统等应用场景提供位置估计算法的设计与优化思路;③支撑高水平学术论文的复现、改进与创新性控制策略的开发验证。; 阅读建议:建议结合文中所述Simulink仿真模型与配套Matlab代码进行动手实践,重点掌握高频信号注入方式的选择、高频响应信号的提取与解调过程、位置误差提取及PI跟踪观测器的设计细节,同时应查阅所列参考文献以深化对高频注入法物理机理与数学建模的理解。


Java SE
