博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在JTable中加载进度条及进行操作
阅读量:2200 次
发布时间:2019-05-03

本文共 5681 字,大约阅读时间需要 18 分钟。

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!

                  我们在多文件下载或多事务处理时,经常会出现使用线程以提高效率的情况,而这时在GUI程序中如何表示进度,就成了一个不大不小的问题。
  现在比较被大众接受的方式,大体就是如迅雷等下载工具中一样,用表格中加载进度条以进行显示。
  而对于Swing来说,并没有现成的组件能够实现这一操作,还有下载的并发,似乎也需要额外进行处理。于是,我在此提供一个基于jdk1.6版本的示例,以供参考。(因为jdk1.6提供了SwingWorker,简化了图形程序中的线程处理,使用其他jdk开发请替换此项即可)
本示例由两个java文件组成
MyTableModel.java
package  org.loon.test;
import  java.awt.Component;
import  java.util.HashMap;
import  java.util.Map;
import  javax.swing.BorderFactory;
import  javax.swing.JProgressBar;
import  javax.swing.JTable;
import  javax.swing.SwingWorker;
import  javax.swing.table.DefaultTableCellRenderer;
import  javax.swing.table.DefaultTableModel;
/** */
/**
 * <p>
 * Title: LoonFramework
 * </p>
 * <p>
 * Description:
 * </p>
 * <p>
 * Copyright: Copyright (c) 2007
 * </p>
 * <p>
 * Company: LoonFramework
 * </p>
 * 
 * @author chenpeng
 * @email:ceponline@yahoo.com.cn
 * @version 0.1
 */
public   class  MyTableModel  extends  DefaultTableModel 
...
{
    /** *//**
     * 
     */
    private static final long serialVersionUID = 1L;
    private static final ColumnContext[] columnArray = ...{
            new ColumnContext("ID", Integer.class, false),
            new ColumnContext("名称", String.class, false),
            new ColumnContext("进度", Integer.class, false) }
;
    private final Map<Integer, SwingWorker> swmap = new HashMap<Integer, SwingWorker>();
    private int number = 0;
    public void addTest(Test t, SwingWorker worker) ...{
        Object[] obj = ...{ new Integer(number), t.getName(), t.getProgress() };
        super.addRow(obj);
        swmap.put(number, worker);
        number++;
    }
    public synchronized SwingWorker getSwingWorker(int identifier) ...{
        Integer key = (Integer) getValueAt(identifier, 0);
        return swmap.get(key);
    }
    public Test getTest(int identifier) ...{
        return new Test((String) getValueAt(identifier, 1),
                (Integer) getValueAt(identifier, 2));
    }
    public boolean isCellEditable(int row, int col) ...{
        return columnArray[col].isEditable;
    }
    public Class<?> getColumnClass(int modelIndex) ...{
        return columnArray[modelIndex].columnClass;
    }
    public int getColumnCount() ...{
        return columnArray.length;
    }
    public String getColumnName(int modelIndex) ...{
        return columnArray[modelIndex].columnName;
    }
    private static class ColumnContext ...{
        public final String columnName;
        public final Class columnClass;
        public final boolean isEditable;
        public ColumnContext(String columnName, Class columnClass,
                boolean isEditable) ...{
            this.columnName = columnName;
            this.columnClass = columnClass;
            this.isEditable = isEditable;
        }
    }
}
class  Test 
...
{
    private String name;
    private Integer progress;
    public Test(String name, Integer progress) ...{
        this.name = name;
        this.progress = progress;
    }
    public void setName(String str) ...{
        name = str;
    }
    public void setProgress(Integer str) ...{
        progress = str;
    }
    public String getName() ...{
        return name;
    }
    public Integer getProgress() ...{
        return progress;
    }
}
class  ProgressRenderer  extends  DefaultTableCellRenderer 
...
{
    /** *//**
     * 
     */
    private static final long serialVersionUID = 1L;
    private final JProgressBar b = new JProgressBar(0, 100);
    public ProgressRenderer() ...{
        super();
        setOpaque(true);
        b.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
    }
    public Component getTableCellRendererComponent(JTable table, Object value,
            boolean isSelected, boolean hasFocus, int row, int column) ...{
        Integer i = (Integer) value;
        String text = "完成";
        if (i < 0) ...{
            //删除
            text = "取消完毕";
        }
 else if (i < 100) ...{
            b.setValue(i);
            return b;
        }
        super.getTableCellRendererComponent(table, text, isSelected, hasFocus,
                row, column);
        return this;
    }
}
MyPanel.java
package  org.loon.test;
import  java.awt.BorderLayout;
import  java.awt.Color;
import  java.awt.Component;
import  java.awt.Dimension;
import  java.awt.EventQueue;
import  java.awt.event.ActionEvent;
import  java.util.HashSet;
import  java.util.Random;
import  javax.swing.AbstractAction;
import  javax.swing.Action;
import  javax.swing.Icon;
import  javax.swing.JButton;
import  javax.swing.JFrame;
import  javax.swing.JPanel;
import  javax.swing.JPopupMenu;
import  javax.swing.JScrollPane;
import  javax.swing.JSeparator;
import  javax.swing.JTable;
import  javax.swing.RowFilter;
import  javax.swing.SwingWorker;
import  javax.swing.WindowConstants;
import  javax.swing.table.TableCellRenderer;
import  javax.swing.table.TableColumn;
import  javax.swing.table.TableRowSorter;
// import org.loon.framework.dll.NativeLoader;
/** */
/**
 * <p>
 * Title: LoonFramework
 * </p>
 * <p>
 * Description:
 * </p>
 * <p>
 * Copyright: Copyright (c) 2007
 * </p>
 * <p>
 * Company: LoonFramework
 * </p>
 * 
 * @author chenpeng
 * @email:ceponline@yahoo.com.cn
 * @version 0.1
 */
public   class  MyPanel  extends  JPanel 
...
{
    /** *//**
     * 
     */
    private static final long serialVersionUID = 1L;
    private static final Color evenColor = new Color(250, 250, 250);
    private final MyTableModel model = new MyTableModel();
    private final TableRowSorter<MyTableModel> sorter = new TableRowSorter<MyTableModel>(
            model);
    private final JTable table;
    public MyPanel() ...{
        super(new BorderLayout());
        table = new JTable(model) ...{
            /** *//**
             * 
             */
            private static final long serialVersionUID = 1L;
            public Component prepareRenderer(
                    TableCellRenderer tableCellRenderer, int row, int column) ...{
                Component component = super.prepareRenderer(tableCellRenderer, row,
                        column);
                //背景色及字体设置
                if (isRowSelected(row)) ...{
                    component.setForeground(getSelectionForeground());
                    component.setBackground(getSelectionBackground());
                }
 else ...{
                    component.setForeground(getForeground());
                    component.setBackground((row % 2 == 0) ? evenColor : table
                            .getBackground());
                }
                return component;
            }
            public JPopupMenu getComponentPopupMenu() ...{
                return makePopup();
            }
        }
;
        table.setRowSorter(sorter);
        model.addTest(new Test("进度条测试", 100), 分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!

转载地址:http://aeeub.baihongyu.com/

你可能感兴趣的文章
【Pyton】【小甲鱼】类和对象:一些相关的BIF(内置函数)
查看>>
【Pyton】【小甲鱼】魔法方法
查看>>
单元测试需要具备的技能和4大阶段的学习
查看>>
【Loadrunner】【浙江移动项目手写代码】代码备份
查看>>
Python几种并发实现方案的性能比较
查看>>
[Jmeter]jmeter之脚本录制与回放,优化(windows下的jmeter)
查看>>
Jmeter之正则
查看>>
【JMeter】1.9上考试jmeter测试调试
查看>>
【虫师】【selenium】参数化
查看>>
【Python练习】文件引用用户名密码登录系统
查看>>
学习网站汇总
查看>>
【Python】用Python打开csv和xml文件
查看>>
【Loadrunner】性能测试报告实战
查看>>
【自动化测试】自动化测试需要了解的的一些事情。
查看>>
【selenium】selenium ide的安装过程
查看>>
【手机自动化测试】monkey测试
查看>>
【英语】软件开发常用英语词汇
查看>>
Fiddler 抓包工具总结
查看>>
【雅思】雅思需要购买和准备的学习资料
查看>>
【雅思】雅思写作作业(1)
查看>>