如果我的组件的preferredSize高于Integer.MAX_VALUE怎么办?

时间:2013-11-23 16:33:46

标签: java swing scroll large-files

我写了一个十六进制查看器。

然而,我发现Swing存在局限性。如果您有一个3GB的文件,并且每行渲染20个像素,则该组件的总高度为:

(每行3GB / 16字节)*每行20像素= 3.75GB

此时,Swing无法呈现任何内容,因为值溢出Integer.MAX_VALUE

到目前为止,这是我最好的想法:

  • 克隆足够的Java2D和JComponent以替代JComponent,它以长坐标进行所有渲染。
  • 克隆JViewport,以便您可以渲染组件/
  • 的视图
  • 将您的替代JViewport放入JScrollPane中,就像您通常那样。

这似乎做了很多工作,但是这样的组件可能对大图或大文本文档等有用。

我考虑过对它进行分页,但是当你使用“查找”功能并且它匹配跨越页面边界的文本时,它似乎很尴尬。

我通常使用的(非Java)十六进制查看器(Hex Fiend)也不使用分页。它只是滚动文档的整个高度,就好像它不是问题一样。

有没有人知道解决这类事情的好方法?

1 个答案:

答案 0 :(得分:1)

您不需要在长坐标中绘制十六进制查看器,因为您只需要绘制您希望此时可见的文件部分。 JScrollPane是一个非常有用的工具,用于滚动大型组件,但你不需要。如果你想滚动这么多的东西,让一个足够大的组件来容纳所有东西很麻烦,那么你可以通过制作一个JScrollBar并根据滚动条的位置绘制你的组件来简单地进行滚动。