【发布时间】:2011-11-07 13:52:40
【问题描述】:
我在这里花了一些时间阅读和试验,并提出了一些方法,但还没有让它们中的任何一个完全起作用,所以我想知道更有经验的 Swing 程序员会做什么。
我的应用程序的主窗口包含 JPanel 的自定义子类型,用于显示从数学函数计算的图像。这可能需要一些时间来计算,所以当发生这种情况时,我会在面板中间显示一条文本消息和一个进度条。我希望在调整面板大小时适当地调整文本和进度条的大小,可能使用面板宽度的恒定分数。
目前我有另一个包含文本和进度条的 JPanel 子类型,我将这个“进度面板”添加到主面板,并在需要时将其设置为可见。主面板不包含任何其他组件,但有自己的 paintComponent() 方法来显示从另一个类获取的 BufferedImage。就目前而言,存在一些问题:
- 进度面板在应该显示的时候并不总是可见,这可能是因为代码中没有明确确保它被绘制在图像前面的地方。
- 进度面板始终占据应用程序面板的整个宽度。它在主面板中使用 BoxLayout 垂直居中,在进度面板之前和之后有一些垂直胶水,但我没有设法获得相同的技巧来水平工作,无论如何,进度面板的首选水平尺寸是不一定对。一种几乎可行的方法是在进度面板周围使用带有水平和垂直支柱的 BorderLayout,但进度面板的大小仍然不正确,并且在调整主面板大小时需要更改支柱。
那你会怎么做?
- 在主面板中使用不同的布局管理器?
- 以某种方式使用 LayeredPane 或 OverlayLayout?
- 向包含图像面板和进度面板的包含层次结构添加更多层?
- 以上的某种组合,还是其他?
如何调整文本大小。调整面板大小时是否需要显式创建新字体,或者有什么方法可以更自动地执行此操作? -
【问题讨论】:
-
恕我直言,在调整窗口中的控件大小时缩放字体大小并不常见。并不是说这一定是一个坏主意,但这绝对不会融入 Swing。不过,鉴于显示尺寸的多样性,我确实很欣赏允许在现代浏览器中更改文本大小的 UI。所以它可能是一个单独的功能,你可以在这部分之后使用:CTRL +/- to change font size.
标签: java swing jpanel font-size layout-manager