1

JLabelの上に s を表示して、上に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が、それを機能させるにはカスタムレイアウトマネージャーを作成する必要があり、そのような単純なことのためにすべてのサイズ変更コードを手動で実行することを避けたいと考えていました.

誰かが他の解決策やアイデアを持っていますか?

4

1 に答える 1