Я пытаюсь отобразить JLabel
s сверху JProgressBar
, чтобы у меня был фантазийный форматированный текст на JProgressBar
.Показать JPanels поверх 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
, но мне пришлось бы написать собственный менеджер компоновки для этого, и я надеялся избежать выполнения всего кода изменения размера вручную для такой простой вещи.
Есть ли у кого-нибудь другие решения или идеи?
Вы пробовали (с 'OverlayLayout') прибавление прогресс бар первым? – MadProgrammer
Да, и когда я это сделал, он закрыл панель, полную JLabels, вместо того, чтобы ждать обновления. Я думаю, проблема заключается в том, чтобы найти способ держать JProgressBar на дне навсегда. –
Попробуйте добавить repaint() на главной панели после обновления индикатора выполнения. Затем оба компонента должны быть перекрашены в одно и то же время. – camickr