java - 如果我的组件的 PreferredSize 高于 Integer.MAX_VALUE 怎么办?

标签 java swing scroll large-files

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

但是,我发现 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/

相关文章:

java - Class.getResource 和 ClassLoader.getSystemResource : is there a reason to prefer one to another?

java - Jbutton Action 监听器

java - 使用 JFileChooser 将文件插入到 Jlabel 中

java - 在文本字段中键入时如何列出建议

javascript - 如何使用函数scrollLeft()知道滚动条何时位于最右侧

java - driver.findElement(By.cssSelector(..)) Selenium 在Windows 10中不起作用

java - 无法正确安装 Apache Ant 的二进制版本 : jspc still not working

java - Commons VFS - 无法列出目录的内容

javascript - 更改滚动行为 : Scroll in Increments of 100vh

javascript - 滚动到带有固定标题的 anchor ,隐藏在标题后面的内容,边距和顶部填充不起作用