gpt4 book ai didi

java - 在JTable中动态加载大量数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:14:13 24 4
gpt4 key购买 nike

这是我的问题:我目前有一个 JTable 包含来自5,000 到远远超过 200,000 行。你看我要去哪里了。数据已经加载到内存中,这不是问题,但是如何我可以创建一个高效的 JTable 以便它只加载需要的行吗是可见的,并且任何事件只作用于那些行在视口(viewport)中可见?显然滚动几乎是不可能的如此多的数据,因为系统需要很长时间才能重新绘制和启动事件。

基本上我认为一种解决方案是确定哪些行在视口(viewport),然后可能创建一个包含这些行的新模型?

最佳答案

您可以使用 FixedRowsTable类型设计,此处显示了 200,000 行中的一些。虽然你想添加额外的按钮 << >>>

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;

class FixedRowsTable {

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {
public void run() {
String[] columns = {"1","2","3","4","5","6","7"};
Integer[][] data = new Integer[200000][columns.length];
for (int xx=0; xx<data.length; xx++) {
for (int yy=0; yy<data[0].length; yy++) {
data[xx][yy] = new Integer((xx+1)*(yy+1));
}
}
final int rows = 11;

JPanel gui = new JPanel(new BorderLayout(3,3));

final JTable table = new JTable(
new DefaultTableModel(data, columns));

final JScrollPane scrollPane = new JScrollPane(
table,
JScrollPane.VERTICAL_SCROLLBAR_NEVER,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
Dimension d = table.getPreferredSize();
scrollPane.setPreferredSize(
new Dimension(d.width,table.getRowHeight()*rows));

JPanel navigation = new JPanel(
new FlowLayout(FlowLayout.CENTER));
JButton next = new JButton(">");
next.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent ae) {
int height = table.getRowHeight()*(rows-1);
JScrollBar bar = scrollPane.getVerticalScrollBar();
bar.setValue( bar.getValue()+height );
}
} );
JButton previous = new JButton("<");
previous.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent ae) {
int height = table.getRowHeight()*(rows-1);
JScrollBar bar = scrollPane.getVerticalScrollBar();
bar.setValue( bar.getValue()-height );
}
} );

navigation.add(previous);
navigation.add(next);

gui.add(scrollPane, BorderLayout.CENTER);
gui.add(navigation, BorderLayout.SOUTH);

JOptionPane.showMessageDialog(null, gui);
}
});
}
}

关于java - 在JTable中动态加载大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13913988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com