1

我试图在JLabela 上显示 sJProgressBar以便我可以在 a 上显示精美的格式化文本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更新时,它会覆盖包含文本字段的另一个面板。

我也尝试过使用 a JLayeredPane,但我必须编写一个自定义布局管理器才能使其工作,并且我希望避免为这样一个简单的事情手动执行所有调整大小的代码。

有没有人有任何其他的解决方案或想法?

4

1 回答 1

1

一种更简单的方法是将面板添加到进度条,然后您不必担心调用重绘。进度条会自动重绘它的子组件:

请参阅有关如何使用进度条的 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);
于 2013-07-16T04:53:37.420 回答