使用Swing timer实现Jtable数据定时更新
2014-12-23 10:42
375 查看
框架类SuperTableFrame.java,如下:
package supertable.swing;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableModel;
import javax.swing.Action;
import javax.swing.AbstractAction;
import javax.swing.Timer;
/**
* @author Administrator
*
*/
public class SuperTableFrame extends JFrame {
private JTable table = null;
private Timer timer = null;
public SuperTableFrame(){
timer = new Timer(300,updateTableAction);
setTitle("SuperTable");
setSize(300,200);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
TableModel model = new SuperTableModel(30,5,10);
table = new JTable(model);
JPanel p = new JPanel();
addButton(p,"Update",new ActionListener(){
public void actionPerformed(ActionEvent evt){
table.validate();
table.updateUI();
}
});
addButton(p,"Start",new ActionListener(){
public void actionPerformed(ActionEvent evt){
timer.start();
}
});
addButton(p,"Stop",new ActionListener(){
public void actionPerformed(ActionEvent evt){
timer.stop();
}
});
Container contentPane = getContentPane();
contentPane.add(new JScrollPane(table),"Center");
contentPane.add(p,"South");
}
public void addButton(Container c,String title,ActionListener a){
JButton b = new JButton(title);
c.add(b);
b.addActionListener(a);
}
private Action updateTableAction = new AbstractAction(){
public void actionPerformed(ActionEvent e){
table.validate();
table.updateUI();
}
};
}
数据模板类SuperTableModel.java,如下:
package supertable.swing;
import java.text.NumberFormat;
import javax.swing.table.AbstractTableModel;
public class SuperTableModel extends AbstractTableModel {
private int years;
private int minRate;
private int maxRate;
private static final double INITAL_BALANCE = 100000.0;
public SuperTableModel(int y,int r1,int r2){
years = y;
minRate =r1;
maxRate = r2;
}
public int getRowCount(){
return years;
}
public int getColumnCount(){
return maxRate -minRate +1;
}
public Object getValueAt(int r,int c){
//double rate = (c + minRate)/100.0;
//int nperiods = r;
//double futureBalance = INITAL_BALANCE * Math.pow(1+rate,nperiods);
double rate = Math.random();
return NumberFormat.getCurrencyInstance().format(rate);
}
public String getColumnName(int c){
double rate = (c+minRate)/100.0;
return NumberFormat.getPercentInstance().format(rate);
}
}
运行图:
package supertable.swing;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableModel;
import javax.swing.Action;
import javax.swing.AbstractAction;
import javax.swing.Timer;
/**
* @author Administrator
*
*/
public class SuperTableFrame extends JFrame {
private JTable table = null;
private Timer timer = null;
public SuperTableFrame(){
timer = new Timer(300,updateTableAction);
setTitle("SuperTable");
setSize(300,200);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
TableModel model = new SuperTableModel(30,5,10);
table = new JTable(model);
JPanel p = new JPanel();
addButton(p,"Update",new ActionListener(){
public void actionPerformed(ActionEvent evt){
table.validate();
table.updateUI();
}
});
addButton(p,"Start",new ActionListener(){
public void actionPerformed(ActionEvent evt){
timer.start();
}
});
addButton(p,"Stop",new ActionListener(){
public void actionPerformed(ActionEvent evt){
timer.stop();
}
});
Container contentPane = getContentPane();
contentPane.add(new JScrollPane(table),"Center");
contentPane.add(p,"South");
}
public void addButton(Container c,String title,ActionListener a){
JButton b = new JButton(title);
c.add(b);
b.addActionListener(a);
}
private Action updateTableAction = new AbstractAction(){
public void actionPerformed(ActionEvent e){
table.validate();
table.updateUI();
}
};
}
数据模板类SuperTableModel.java,如下:
package supertable.swing;
import java.text.NumberFormat;
import javax.swing.table.AbstractTableModel;
public class SuperTableModel extends AbstractTableModel {
private int years;
private int minRate;
private int maxRate;
private static final double INITAL_BALANCE = 100000.0;
public SuperTableModel(int y,int r1,int r2){
years = y;
minRate =r1;
maxRate = r2;
}
public int getRowCount(){
return years;
}
public int getColumnCount(){
return maxRate -minRate +1;
}
public Object getValueAt(int r,int c){
//double rate = (c + minRate)/100.0;
//int nperiods = r;
//double futureBalance = INITAL_BALANCE * Math.pow(1+rate,nperiods);
double rate = Math.random();
return NumberFormat.getCurrencyInstance().format(rate);
}
public String getColumnName(int c){
double rate = (c+minRate)/100.0;
return NumberFormat.getPercentInstance().format(rate);
}
}
运行图:
相关文章推荐
- <java><JTable>使用AbstractTableModel实现更新、删除、插入数据
- JTable的使用示例,实现动态更新数据
- 使用navicat8通过数据转移实现更新 和 数据库保存实现备份[图文]
- asp.net 使用驻留在页面中的Cache缓存常用可定时更新的数据
- java 大量数据提交时,使用队列定时提交思路的程序实现
- java线程池的使用,实现大量数据的更新操作
- C#使用SqlDataAdapter 实现数据的批量插入和更新
- 如何自动更新JTable中的数据(代码实现)
- Java JTable 实现数据动态更新
- 使用oracle定时任务和存储过程实现数据拷贝
- 使用EF6和MVC5实现一个简单的选课系统--使用EF6更新相关数据(8/12)
- bootstrap使用(弹窗实现/弹出窗口数据不更新)
- asp.net 使用驻留在页面中的Cache缓存常用可定时更新的数据 (转)
- 巧妙使用JQuery Clone 添加多行数据,并更新到数据库的实现代码
- handler实现自定义对话框(Dialog)的数据定时(TimerTask)更新
- Ajax无刷新实现定时更新数据
- handler实现自定义对话框(Dialog)的数据定时(TimerTask)更新
- 使用Hibernate实现数据更新功能(二)
- javaEE 使用ServletContext实现服务器端简单定时更新缓存
- javaEE 使用ServletContext实现服务器端简单定时更新缓存