我试图在JLabel
顶部显示JProgressBar
,以便在JProgressBar
上显示精美的格式化文本。
这是我的组件的构造函数,它扩展了JPanel
:
public InfoDisplay() {
//setLayout(new GridLayout(0, 1));
setLayout(new OverlayLayout(this));
lblPlayer = new JLabel();
lblPlayer.setName("Owner");
lblUnit = new JLabel();
lblUnit.setName("Unit");
lblCoords = new JLabel();
lblCoords.setName("Coordinates");
lblResources = new JLabel();
lblResources.setName("Resouces");
prgProgress = new JProgressBar();
prgProgress.setMaximum(4);
prgProgress.setStringPainted(true);
fmtDefault = "<html><font color='gray'>%s:</font> %s</html>";
JPanel pnlInfo = new JPanel();
pnlInfo.setLayout(new FlowLayout(FlowLayout.LEADING));
pnlInfo.setOpaque(false);
pnlInfo.add(lblPlayer);
pnlInfo.add(lblUnit);
pnlInfo.add(lblCoords);
pnlInfo.add(lblResources);
add(pnlInfo);
add(prgProgress);
displayInfo(Collections.EMPTY_LIST);
setProgress("Upkeep", 2);
}
我尝试使用
OverlayLayout
,它在创建表单时可以实现此目标。但是,当JProgressBar
更新时,它将掩盖另一个包含文本字段的面板。我也尝试过使用
JLayeredPane
,但是我必须编写一个自定义布局管理器才能正常工作,并且我希望避免手工完成所有调整大小的代码。有人还有其他解决方案或想法吗?
最佳答案
一种更简单的方法是将面板添加到进度条,然后您就不必担心调用重新绘制。进度条将自动重绘其子组件:
请参见How to Use Progress Bars上的Swing教程。我在ProgressBarDemo
中添加了以下代码:
progressBar.setLayout( new BorderLayout() );
JPanel child = new JPanel( new BorderLayout() );
child.setOpaque(false);
child.add( new JLabel("WEST"), BorderLayout.WEST );
child.add( new JLabel("EAST"), BorderLayout.EAST );
progressBar.add(child);
关于java - 在JProgressBar顶部显示JPanels,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17668072/