我花了一段时间阅读并在这里进行实验,并提出了一些方法,但还没有完成任何工作,所以我想知道更多有经验的Swing程序员会做什么。
我的应用程序的主窗口包含JPanel的自定义子类型,用于显示从数学函数计算的图像。这可能需要一些时间来计算,所以当发生这种情况时,我会在面板中间显示一条文本消息和一个进度条。我希望文本和进度条在调整面板大小时适当调整大小,可能使用面板宽度的常量部分。
目前我有另一个包含文本和进度条的JPanel子类型,我将此“进度面板”添加到主面板,并在需要时将其设置为可见。主面板不包含任何其他组件,但有自己的paintComponent()方法来显示从另一个类获取的BufferedImage。这有一些问题:
那你会做什么?
如何调整文本大小。我是否需要在调整面板大小时显式创建新的字体,或者是否有任何方法可以更自动地执行此操作? -
答案 0 :(得分:3)
JProgressBar
的首选大小由UI代表BasicProgressBarUI
指定。下面的示例说明了各种布局管理器的效果。 FlowLayout
仅使用UIManager
默认值ProgressBar.horizontalSize
,而GridLayout
和BorderLayout.CENTER
填充可用空间。 BoxLayout
,使用侧翼胶水,在调整框架大小时按比例调整。
我已使用
SwingWorker
从process()
的{{1}}方法更新GUI应该是安全的。您可以更改图层甚至删除组件,但我会对过于复杂的任何事情保持警惕。
附录:这是相关的默认值。
SwingWorker
javax.swing.plaf.DimensionUIResource[width=146,height=12]
代码:
System.out.println(UIManager.get("ProgressBar.horizontalSize"));
答案 1 :(得分:2)
我知道这是一个布局问题,但如果您有有用的中间结果,SwingWorker
可能会使问题更简单。我有时会从example开始。