需求:我要用swing做一个表格显示数据库中的部分数据,数据库中的数据是在不停变化的,我需要界面显示的数据和数据库中的数据同步,请问以前做过的给个思路最好贴点关键代码,拜托了!!!
代码:这是我的部分代码,定时器方法循环执行6次,程序就死了,不知道是为什么,请大家也帮忙看下
package com.rfid.view;
import javax.swing.JDesktopPane;
import javax.swing.JButton;
import javax.swing.ListSelectionModel;
import javax.swing.Timer;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.HashMap;
import java.util.List;
import com.rfid.rw.RReader;
import com.rfid.rw.RfidDAO;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
public class RfidConsole extends JDesktopPane implements ActionListener {
private static final long serialVersionUID = 1L;
private JButton jButton = null;
private JButton jButton2 = null;
private JScrollPane jScrollPane = null;
private JTable jTable = null;
private JButton jButton1 = null;
private static HashMap<String, RReader> hashmap = new HashMap<String, RReader>();
private RfidDAO dao;
private TableModel tableModel; // @jve:decl-index=0:
// [color=red]定时器方法[/color] public void actionPerformed(ActionEvent e) {
// 更新表格模型中的数据
tableModel = getTableModel();
jTable.repaint();
System.out.println("run");
}
// 默认构造函数
public RfidConsole() {
this.dao = new RfidDAO();
initialize();
Timer timer = new Timer(3000, this);
timer.start();
}
// 默认初始化方法
private void initialize() {
setSize(404, 301);
add(getJButton(), null);
add(getJButton2(), null);
getJButton().setEnabled(false);
getJButton2().setEnabled(false);
List<RReader> list = dao.getRfids();
for (int i = 0; i < list.size(); i++) {
RReader rfid = (RReader) list.get(i);
rfid.setPort(49380);
rfid.setConsle(this);
/*
* if (rfid.startR()) { RfidConsole.hashmap.put(rfid.getId(), rfid);
* dao.updateFlag(rfid.getId(), 1); } else {
* dao.updateFlag(rfid.getId(), 3); }
*/
}
// getJTable(getTableModel());
add(getJTable(getTableModel()), null);
add(getJScrollPane(), null);
this.add(getJButton1(), null);
}
/**
* This method initializes jButton 启动按钮
*
* @return javax.swing.JButton
*/
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setBounds(new Rectangle(29, 19, 60, 28));
jButton.setText("启动");
jButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
int srow = jTable.getSelectedRow();
if (srow != -1) {
String id = (String) jTable.getValueAt(srow, 1);
RReader rfid = RfidConsole.hashmap.get(id);
// rfid.startR();
RfidConsole.hashmap.put(id, rfid);
dao.updateFlag(id, 1);
System.out.println("启动了:" + rfid.getName());
buttonControl(1, srow);
}
}
});
}
return jButton;
}
/**
* This method initializes jButton2 停止按钮
*
* @return javax.swing.JButton
*/
private JButton getJButton2() {
if (jButton2 == null) {
jButton2 = new JButton();
jButton2.setBounds(new Rectangle(106, 17, 61, 30));
jButton2.setText("停止");
jButton2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
int srow = jTable.getSelectedRow();
if (srow != -1) {
String id = (String) jTable.getValueAt(srow, 1);
RReader rfid = RfidConsole.hashmap.get(id);
dao.updateFlag(id, 0);
System.out.println("关闭了:" + rfid.getName());
buttonControl(0, srow);
// rfid.stopR();
}
}
});
}
return jButton2;
}
/**
* This method initializes jScrollPane 存放table的pane
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane() {
if (jScrollPane == null) {
jScrollPane = new JScrollPane();
jScrollPane.setBounds(new Rectangle(26, 60, 355, 178));
jScrollPane.setViewportView(jTable);
}
return jScrollPane;
}
/**
* This method initializes jTable 表格数据
*
* @return javax.swing.JTable
*/
public TableModel getTableModel() {
List list = dao.getRfids();
int size = list.size();
String[] column_names = { "序号", "编号", "名称", "IP", "状态", "信号" };
tableModel = new DefaultTableModel(column_names, size);
for (int i = 0; i < size; i++) {
RReader rfid = (RReader) list.get(i);
tableModel.setValueAt(i + 1, i, 0);
tableModel.setValueAt(rfid.getId(), i, 1);
tableModel.setValueAt(rfid.getName(), i, 2);
tableModel.setValueAt(rfid.getIp(), i, 3);
if (1 == rfid.getFlg()) {
tableModel.setValueAt("已启动", i, 4);
} else if (0 == rfid.getFlg()) {
tableModel.setValueAt("已停止", i, 4);
} else {
tableModel.setValueAt("设备未连接", i, 4);
}
}
return tableModel;
}
/** 表格 */
public JTable getJTable(TableModel tablemodel) {
if (jTable == null) {
jTable = new JTable(tablemodel);
jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jTable.addMouseListener(new MouseAdapter() {
public void mouseReleased(MouseEvent e) {
if (!e.isShiftDown()) {
int srow = jTable.getSelectedRow();
String id = (String) jTable.getValueAt(srow, 1);
RReader rfid = dao.getRfid(id);
int flag = rfid.getFlg();
buttonControl(flag, srow);
}
}
});
}
return jTable;
}
public JTable getJTable() {
return jTable;
}
/**
* 控制界面按钮 0:启动按钮可用 1:关闭按钮可用 其它:启动关闭按钮都不可用
* */
public void buttonControl(int flag, int row) {
TableModel tablemodel = jTable.getModel();
if (flag == 0) {
jButton.setEnabled(true);
jButton2.setEnabled(false);
tablemodel.setValueAt("已关闭", row, 4);
} else if (flag == 1) {
jButton.setEnabled(false);
jButton2.setEnabled(true);
tablemodel.setValueAt("已启动", row, 4);
} else {
jButton.setEnabled(false);
jButton2.setEnabled(false);
}
}
/**
* This method initializes jButton1
*
* @return javax.swing.JButton
*/
public JButton getJButton1() {
if (jButton1 == null) {
jButton1 = new JButton();
jButton1.setBounds(new Rectangle(345, 29, 17, 16));
}
return jButton1;
}
}