我写了一个十六进制查看器。
但是,我发现 Swing 存在局限性。如果您有一个 3GB 文件并且以每行 20 像素进行渲染,则组件的总高度为:
(3GB/每行 16 字节)* 每行 20 像素 = 3.75GB
此时,Swing 无法渲染任何内容,因为值溢出 Integer.MAX_VALUE
。
这是我迄今为止最好的想法:
- 克隆足够多的 Java2D 和 JComponent,以替代 JComponent,后者在长坐标中完成所有渲染。
- 克隆 JViewport,以便您可以渲染组件的 View /
- 像平常一样将替代的 JViewport 放入 JScrollPane 中。
这看起来工作量很大,但这样的组件对于大型图表或大型文本文档等可能很有用。
我考虑过只对它进行分页,但当您使用“查找”功能并且它匹配跨越页面边界的文本时,这似乎会很尴尬。
我通常使用的(非 Java)十六进制查看器(Hex Fiend)也不使用分页。它只是滚动文档的整个高度,就好像这不是问题一样。
有人知道解决此类问题的好方法吗?
最佳答案
您不需要在长坐标中绘制十六进制查看器,因为您只需要绘制文件中您希望当前可见的部分。 JScrollPane 是一个非常有用的工具,用于滚动大型组件,但您不需要它。如果你想滚动浏览太多东西,以至于很难有一个足够大的组件来容纳所有内容,那么你可以简单地通过创建一个 JScrollBar 并根据滚动条的位置绘制你的组件来完成滚动。
关于java - 如果我的组件的 PreferredSize 高于 Integer.MAX_VALUE 怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20164842/