weixin_42332202 2009-11-07 21:26
浏览 304
已采纳

swing表格

需求:我要用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;
}

}

  • 写回答

2条回答 默认 最新

  • niqusi00000 2009-11-11 17:40
    关注

    第一种方法,你可以用一个线程去更新table的model
    第二种方法,可以添加个刷新按钮,或者刷新方法,在每次执行其他用到table数据的方法时去刷新一次.
    第三种方法,如果数据的变动能由你的程序来控制就行了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退
  • ¥20 win系统的PYQT程序生成的数据如何放入云服务器阿里云window版?