我有一个要求,我需要在网格中显示从第三方服务器收到的股票报价符号的流式数据,例如出价、询问、最后、更改值。
为此,我可以使用 Jtable,因为数据会不断变化吗?
请分享您的看法,在此先感谢
我有一个要求,我需要在网格中显示从第三方服务器收到的股票报价符号的流式数据,例如出价、询问、最后、更改值。
为此,我可以使用 Jtable,因为数据会不断变化吗?
请分享您的看法,在此先感谢
是的,为什么不为此使用 JTable。我想在某些时候你将不得不在你的 TableModel 上创建一个 SlidingWindow 以避免过多的数据。
这是一个小的演示示例,显示了一种方法(Random
并且Timer
只是用来模拟传入数据):
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();
}
});
}
}