У меня есть собственный класс, который расширяет JLabel. Для конкретных экземпляров этого класса я хочу добавить интервал к тексту с левой стороны. Мне нужен интервал, так как я устанавливаю фон этой JLabel, и я не хочу, чтобы текст увеличивался прямо рядом с краем цветного фона. Я немного ловил рыбу и реализовал это (внутри функции рисования):
if (condition) {
bgColor = Color.red;
setBackground(bgColor);
setOpaque(true);
// This line merely adds some padding on the left
setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0));
}
else {
setOpaque(false);
}
Похоже, это работает, поскольку добавляет желаемый интервал, однако имеет нежелательный побочный эффект, поскольку нарушает перекрашивание всей остальной части приложения ... кажется, что перерисовывается только этот конкретный компонент а не остальная часть приложения. В конце концов я отследил его до вызова setBorder ... установка ЛЮБОГО вида границ, по-видимому, приводит к тому же нарушенному поведению. У нас есть две разные версии нашего приложения, одна из которых работает на Java 1.5, а другая на Java 1.6, версия Java 1.6, кажется, работает правильно, а версия Java 1.5 - нет. Невозможно обновить старую версию до Java 1.6 ... Мне нужно что-то, что будет работать в Java 1.5. Кроме того, я попробовал это (просто чтобы посмотреть, как это выглядит):
setHorizontalTextPosition(JLabel.CENTER);
И это, похоже, нарушает перекраску точно таким же образом. Я просмотрел источник нашего приложения и нашел другие места, где мы устанавливаем границы (включая пустые границы), но не смог найти ничего на JLabels (только панели, кнопки и т. Д.). Кто-нибудь видел что-нибудь подобное раньше? Знаете, как это исправить? Или, может быть, другой способ получить требуемый интервал, который может обойти ошибку? Спасибо.