日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

测试JTable添加数据

發布時間:2023/12/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 测试JTable添加数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

package kanjingcai;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel;
import java.awt.*;
import java.util.Vector;
/**
?* 測試JTable添加數據,刪除數據頻繁操作,JTable出現數組越界的處理
?* 在工作中如果遇到頻繁的操作Jtable的數據,特別是速率很快的情況下,經常會遇到
?* Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException
?* 這樣的數組越界的異常,這里引入Swing的一個線程,能很好的解決這個問題
?* 供同樣遇到這樣問題的人參考。
?*/
@SuppressWarnings("serial")
public class ThreadTable extends JTable {
?private DefaultTableModel model;

?static String[] header = new String[] { "id", "name", "sex", "age" };

?public ThreadTable() {
??model = new DefaultTableModel(header, 0);
??this.setModel(model);
?}

?public void deleteRows(int rowCount) throws Exception {
??if (rowCount >= model.getColumnCount()) {
???throw new Exception("刪除的行數不能超過model的總行數!");
??} else {
???for (int i = rowCount - 1; i >= 0; i--) {
????model.removeRow(i);
???}
??}
?}

?public void testInsertValue() {
??final Vector<String> value = new Vector<String>();
??value.add("0");
??value.add("simon");
??value.add("boy");
??value.add("21");

??Thread thread = new Thread() {
???public void run() {
????for (int i = 0; i < 100000; i++) {
?????//addValueWithThread(value);//這個方法不會出現越界
?????addValueWithoutThread(value);//這個方法會出現越界,差別就在于加入一個線程
?????try {
??????sleep(10);
?????} catch (InterruptedException e) {
??????// TODO Auto-generated catch block
??????e.printStackTrace();
?????}
????}
???}
??};
??thread.start();
?}
?/**
? * 將添加記錄和刪除記錄在一個線程里走,不會出現頁面刷新的時候,數組越界的問題
? * @param value
? */
?public void addValueWithThread(final Vector value) {
??Thread thread = new Thread() {
???public void run() {
????Runnable runnable = new Runnable() {
?????public void run() {
??????model.addRow(value);
??????if (model.getRowCount() > 5) {
???????try {
????????deleteRows(2);
???????} catch (Exception e) {
????????// TODO Auto-generated catch block
????????e.printStackTrace();
???????}
??????}
?????}
????};
????SwingUtilities.invokeLater(runnable);
???}
??};
??thread.start();
?}
?/**
? * 這樣一邊添加記錄,一邊刪除記錄,會出現數組越界的情況
? * @param value
? */
?public void addValueWithoutThread(final Vector value) {
??model.addRow(value);
??if (model.getRowCount() > 5) {
???try {
????deleteRows(2);
???} catch (Exception e) {
????// TODO Auto-generated catch block
????e.printStackTrace();
???}
??}


?}
?public static void main(String[] args) {
??try {
???UIManager.setLookAndFeel(new WindowsClassicLookAndFeel());
??} catch (UnsupportedLookAndFeelException e) {
???// TODO Auto-generated catch block
???e.printStackTrace();
??}

??JFrame f = new JFrame();
??f.getContentPane().setLayout(new BorderLayout());

??ThreadTable table = new ThreadTable();
??JScrollPane scroll = new JScrollPane(table);
??f.getContentPane().add(scroll, BorderLayout.CENTER);

??f.setSize(800, 600);
??f.setLocation(250, 250);
??f.setVisible(true);

??table.testInsertValue();
?}
}

轉載于:https://www.cnblogs.com/kanjingcai/archive/2009/04/25/1443252.html

總結

以上是生活随笔為你收集整理的测试JTable添加数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。