В зависимости от вашего конкретного случая использования вы не захотите использовать JXBusyLabel в качестве компонента рендеринга (вы не получите анимацию, так как это рендер ), все, что вам нужно, это PainterHighlighterнастроен с BusyPainter, свойство кадра которого контролируется таймером.Независимо от того, является ли художник видимым, должно быть привязано к какому-либо свойству ваших данных, которое запускает включение / выключение подсветки HighlightPredicate.
Например, см. PainterVisualCheck interactiveAnimatedBusyPainterHighlight в иерархии тестов swingx, средство визуализации пакетов.Что-то вроде:
BusyPainter painter = new BusyPainter();
ActionListener l = new ActionListener() {
public void actionPerformed(ActionEvent e) {
int frame = busyPainter.getFrame();
frame = (frame+1)%busyPainter.getPoints();
busyPainter.setFrame(frame);
}
};
Timer timer = new Timer(delay, l);
AbstractHighlighter hl = new PainterHighlighter(HighlightPredicate.NEVER, painter);
table.getColumnExt().addHighlighter(hl);
// on a change that should toggle the busy-ness on/off
if (on) {
hl.setHighlightPredicate(HighlightPredicate.ALWAYS);
timer.start();
} else {
hl.setHighlightPredicate(HighlightPredicate.NEVER);
timer.stop();
}
Редактировать (отвечая на расширенный вопрос):
, чтобы активировать подсветку занятости только для определенного условия, реализовать пользовательский HighlightPredicate и установить его вместо ВСЕГДА.Fi конкретная строка в столбце:
HighlightPredicate predicate = new HighlightPredicate() {
@Override
public boolean isHighlighted(Component renderer,
ComponentAdapter adapter) {
return
adapter.convertRowIndexToModel(adapter.row) == mySpecialRow;
}
};