1

グリッド内のサードパーティサーバーから受け取った株価シンボルのBid、Ask、Last、Change値などのストリーミングデータを表示する必要があるという要件があります。

このために、データが継続的に変更されるため、Jtableを使用できますか?

よろしくお願いします。

4

1 に答える 1

3

はい、それについては JTable を使用してみませんか。過剰なデータを避けるために、ある時点で TableModel に SlidingWindow を作成する必要があると思います。

これを行う 1 つの方法を示す小さなデモの例を次に示します (RandomTimerは、受信データをシミュレートするためだけに存在します)。

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;

public class TestStreamingDataTable {

    protected void initUI() {
        final Random random = new Random();
        final DefaultTableModel model = new DefaultTableModel(new String[] { "Bid", "Ask", "Last", "Change values", "Time" }, 0);
        final JTable table = new JTable(model);
        table.setFillsViewportHeight(true);
        JFrame frame = new JFrame(TestStreamingDataTable.class.getSimpleName());
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JScrollPane scrollpane = new JScrollPane(table);
        frame.add(scrollpane, BorderLayout.CENTER);
        frame.pack();
        frame.setVisible(true);
        Timer t = new Timer(1000, new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                model.insertRow(0, new Object[] { random.nextInt(1000), random.nextInt(1000), random.nextInt(1000), random.nextInt(1000),
                        new Date() });
            }
        });
        t.start();
    }

    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException,
            UnsupportedLookAndFeelException {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new TestStreamingDataTable().initUI();
            }
        });
    }

}
于 2013-01-18T08:43:51.880 に答える