Swing:用于显示文本流数据的组件

Swing:用于显示文本流数据的组件,swing,Swing,我有一个要求,我需要在网格中显示从第三方服务器接收的股票报价符号的流数据,如Bid、Ask、Last、Change值 为此,我可以使用Jtable,因为数据将不断变化 请分享您的观点,提前谢谢是的,为什么不使用JTable呢。我想在某个时候,为了避免数据过多,您必须在TableModel上创建一个滑动窗口 下面是一个小的演示示例,它展示了一种方法(随机和计时器只是用来模拟传入的数据): 回答得很好,非常感谢Polet。我的要求是,不插入新行,是否可以更新行???@PreethiJain您可以始终

我有一个要求,我需要在网格中显示从第三方服务器接收的股票报价符号的流数据,如Bid、Ask、Last、Change值

为此,我可以使用Jtable,因为数据将不断变化


请分享您的观点,提前谢谢

是的,为什么不使用JTable呢。我想在某个时候,为了避免数据过多,您必须在TableModel上创建一个滑动窗口

下面是一个小的演示示例,它展示了一种方法(随机
和计时器
只是用来模拟传入的数据):


回答得很好,非常感谢Polet。我的要求是,不插入新行,是否可以更新行???@PreethiJain您可以始终使用
setValueAt()
但必须逐个单元格进行更新。您最好使用自己的表模型类,该类扩展了
AbstractTableModel
,实现了
TableModel
的所有方法,并拥有一些额外的方法来同时更新一行或多行。然后,这些方法将需要调用由
AbstractTableModel
提供的相应fireTableXXX方法。非常感谢,我可以使用setValueAt进行管理。再次感谢。
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();
            }
        });
    }

}