swing: создание JProgressBar с наложенным на него ярлыком? - PullRequest
1 голос
/ 18 июня 2010

Я хотел бы использовать JProgressBar и дополнить его, чтобы напечатать его текущее значение, а также графическую панель.

progress bar

Полагаю, лучший способ сделать это - переопределить paintComponent:

@Override protected void paintComponent(Graphics g) {
// Let component paint first 
    super.paintComponent(g); 
// paint my contents next....
}

но я не уверен ... любой совет?

Ответы [ 2 ]

8 голосов
/ 18 июня 2010

Я бы предложил вам использовать собственный API:

public void setStringPainted(boolean b)

Устанавливает значение свойства stringPainted, которое определяет, должен ли индикатор выполнения отображать строку прогресса.По умолчанию установлено значение false, что означает, что строка не отображается.Некоторый внешний вид может не поддерживать строки прогресса или может поддерживать их только тогда, когда индикатор выполнения находится в определенном режиме.

и

public void setString(String s)

Устанавливает значение строки прогресса.По умолчанию эта строка имеет значение null, что подразумевает встроенное поведение использования простой строки процента.Если вы предоставили пользовательскую строку прогресса и хотите вернуться к встроенному поведению, установите для этой строки значение null.Строка прогресса отображается только в том случае, если метод isStringPainted возвращает значение true.

Ссылка всегда хорошая вещь.:)

Имейте в виду, что для того, чтобы разрешить редактирование значения во время его выполнения, вы должны рассмотреть возможность присоединения ChangeListener к индикатору выполнения.

1 голос
/ 18 июня 2010

Рабочий раствор на основе ответа Джека:

final JProgressBar pbar = ...
pbar.setStringPainted(true);
final NumberFormat nf = NumberFormat.getInstance();
nf.setGroupingUsed(true);
pbar.setString(nf.format(pbar.getValue()));             
pbar.addChangeListener(new ChangeListener()
{
    @Override public void stateChanged(ChangeEvent event) {
        pbar.setString(nf.format(pbar.getValue()));             
    }           
});
...