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