可以用FineReport报表软件实现。finereport是纯java软件,类excel设计模式,是一款功能极其牛掰的表格工具,可与数据库直接对接(一般的数据库,Oracle,SqlServer,MySql,DB2,Sybase,Informix等都支持),文本数据直接导入当然也支持,企业级额应用中包括设置定时报表、自定汇总数据发送邮件、报表权限分配、决策平台搭建等,因为是专业的报表软件,功能很强大,其实很多业内人士都在用这款软件,另外几乎不用自己编写代码,所以新手很容易上手使用。应该会比较适合您的,满意的话可以采纳的哦,谢谢了
成都网站建设哪家好,找创新互联!专注于网页设计、重庆网站建设、微信开发、微信小程序开发、集团成都定制网页设计等服务项目。核心团队均拥有互联网行业多年经验,服务众多知名企业客户;涵盖的客户类型包括:混凝土搅拌机等众多领域,积累了大量丰富的经验,同时也获得了客户的一致赞许!
JTable单元格是由单元格绘制器绘制出来的,这是一些执行TableCellRenderer接口的类。TableCellRenderer接口定义了唯一的getTableCellRendererComponent方法,返回对Component的引用,二Component则用来实现绘图操作。但是因为定义单独的类来执行TableCellRenderer比较方便,而且可以实现绘图操作,所以TablecellRenderer通常只返回对自己的引用。下面是传递给getTableCellRendererComponent()方法的几个参数:
对JTable的引用,含有要绘制的单元格
对单元格值的引用
boolean标记,用来表示单元格是否被选中
boolean标记,用来表示单元格是否为输入焦点
绘制的单元格的行索引号
绘制的单元格的列索引号
动态创建表格,比如:str你从数据库读出列名,data数据集
这里的data是一个二维数组,
就像
{{学号:001,出生:09-01,成绩99}
{学号:001,出生:09-01,成绩99}
{学号:001,出生:09-01,成绩99}}
生成表格
学号 出生日期 成绩
001 09-01 99
001 09-01 98
001 09-01 99
使用swing的JTable作为表格显示数据
JTable table = new JTable(new DefaultTableModel(rowData, columnNames))
在参数里填入列数据和列名称
把table放到一个JFrame里显示
使用线程或者Timer定时更新数据
使用((DefaultTableModel) table.getModel()).fireTableDataChanged();让页面刷新
import java.awt.BorderLayout;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingWorker;
import javax.swing.table.DefaultTableModel;
public class test extends JFrame {
private static final long serialVersionUID = -4892684184268025880L;
private static final Timer time = new Timer("test");
private VectorVectorObject rowData = new VectorVectorObject();
private JTable table;
private int count = 0;
public test() {
super("表格");
this.setSize(400, 400);
this.setLayout(new BorderLayout());
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
VectorString columnNames = new VectorString();
columnNames.add("统计项");
columnNames.add("数目");
table = new JTable(new DefaultTableModel(rowData, columnNames));
this.add(new JScrollPane(table), BorderLayout.CENTER);
time.schedule(new TimerTask() {
@Override
public void run() {
update();
}
}, 0, 1000);
}
private void update() {
new SwingWorkerObject, Object() {
protected Object doInBackground() throws Exception {
rowData.clear();
for (int i = 0; i 4; i++) {
VectorObject info = new VectorObject();
info.add("测试");
info.add(count);
rowData.add(info);
}
count++;
return null;
}
protected void done() {
((DefaultTableModel) table.getModel()).fireTableDataChanged();
}
}.execute();
}
public static void main(String args[]) {
new test().setVisible(true);
}
}