3

データベースからjtableにデータを表示しているjframeにjpanelがあります。一定時間後にこのjtableを更新するタイマーを追加したいのですが、jpanelのタイマーコードを追加する場所がわかりません..

これが私のコードです..

orgR.addMenuListener(new MenuListener() {

        public void menuSelected(MenuEvent e) {


            final JLabel l = new JLabel("Live CDRRecord");
            l.setBounds(320, 50, 500, 60);
            l.setFont((new Font("verdana", Font.BOLD, 25)));



            final Vector columnNames = new Vector();
            final Vector data = new Vector();


            try {
                Class.forName("com.mysql.jdbc.Driver").newInstance();
                Connection con = DriverManager.getConnection("");
                String sql = "Select calldate,source,destination,extension,trunk,duration,toc,callcost from table";
                Statement statement = con.createStatement();
                ResultSet resultSet = statement.executeQuery(sql);
                ResultSetMetaData metaData = resultSet.getMetaData();
                int columns = metaData.getColumnCount();
                columnNames.add("Calldate");
                columnNames.add("Source");
                columnNames.add("Destination");
                columnNames.add("Extension");
                columnNames.add("Trunk");
                columnNames.add("Duration");
                columnNames.add("TOC");
                columnNames.add("CallCost");

                while (resultSet.next()) {
                    Vector row = new Vector(columns);
                    for (int i = 1; i <= columns; i++) {
                        row.addElement(resultSet.getObject(i));
                    }
                    data.addElement(row);
                }
                resultSet.close();
                statement.close();
            } catch (Exception ev) {
                System.out.println(ev);
            }


            final JTable table = new JTable() {

                public Component prepareRenderer(TableCellRenderer renderer,
                        int rowIndex, int vColIndex) {
                    Component c = super.prepareRenderer(renderer, rowIndex, vColIndex);
                    if (rowIndex % 2 == 0 && isRowSelected(rowIndex)) {
                        c.setBackground(Color.LIGHT_GRAY);
                    } else {
                        // If not shaded, match the table's background
                        c.setBackground(getBackground());

                    }
                    return c;
                }
            };

            table.setBackground(Color.WHITE);
            table.setModel(new DefaultTableModel(data, columnNames));




            TableColumn column;
            for (int i = 0; i < table.getColumnCount(); i++) {
                column = table.getColumnModel().getColumn(i);
                column.setMaxWidth(800);



            }

            final JScrollPane scrollPane = new JScrollPane(table);
            scrollPane.setBounds(10, 120,920,400);


            p2.add(l);

            p2.add(scrollPane);
            p2.setBounds(00, 00, 1400, 650);
            p2.add(menubar);
            p2.setLayout(null);
            Container contentPane = frame.getContentPane();
            contentPane.removeAll();
            contentPane.add(p2);
            contentPane.invalidate();
            contentPane.repaint();


        }

        public void menuDeselected(MenuEvent e) {
            // System.out.println("FileTwo.menuDeselected");
            orgR.removeAll();
        }

        public void menuCanceled(MenuEvent e) {
            // System.out.println("FileTwow.menuCanceled");
            orgR.removeAll();
        }
    });

どんな助けでも大歓迎です..事前に感謝します..

4

2 に答える 2

4

util タイマーではなく、swing タイマーを使用していることを確認してください。

public final static int INTERVAL = 1000;

timer = new Timer(INTERVAL, new ActionListener() {
public void actionPerformed(ActionEvent evt) {

   //Refresh the panel
       panel.revalidate();

       if (/* condition to terminate the thread. */) {
        timer.stop();
       }
    }    
});

timer.start();

パネルの再検証メソッドは、指定された間隔の後にパネルをリフレッシュします。タイマーを停止するには、終了条件も定義する必要があります。

指定された間隔の後。タイマーは、ActionListenerクラスによって処理されるアクション イベントを発生させます。

于 2013-10-17T11:35:28.100 に答える
1

You should use javax.swing.Timer, something like this:

    int timerTimeInMilliSeconds = 1000;
    javax.swing.Timer timer = new javax.swing.Timer(timerTimeInMilliSeconds, new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            refreshTable();
        }
    });
于 2013-10-17T11:33:14.560 に答える