Рисование текста в java, проблемы Look и Feel - PullRequest
4 голосов
/ 16 ноября 2011

Я переопределил метод paintComponent расширенного JToggleButton, чтобы я мог использовать заливку TexturePaint для текста при переключении кнопки. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу нарисовать текст с использованием того же шрифта, который используется по умолчанию. Я пробовал g2d.setFont (this.getFont ()); где «это» - кнопка, с которой я работаю. Шрифт близок, но кажется более жирным, чем текст по умолчанию, когда я его рисую. Есть ли лучший способ для рисования текста, который выглядит так же, как по умолчанию, за исключением цвета? Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 17 ноября 2011

Если вы переопределяете метод paintComponent (), тогда объект Graphics должен быть уже настроен на использование шрифта переключателя. Разница, вероятно, в том, что антиалиасинг не включен по умолчанию.

Я нашел код, который работает для меня в очень ограниченном тестировании. Попробуйте следующее в методе paintComponent ():

Graphics2D g2 = (Graphics2D)g.create();
Toolkit toolkit = Toolkit.getDefaultToolkit();
Map map = (Map)(toolkit.getDesktopProperty("awt.font.desktophints"));

if (map != null)
{
    g2.addRenderingHints(map);
}

g2.drawString(...);
g2.dispose();

В этом сообщении меня предупреждали - Как установить текст над и под значком JButton? - что это не сработает на всех платформах и LAF. Комментарий также дает предлагаемое решение о том, как рисовать текст.

3 голосов
/ 16 ноября 2011

Этот вопрос похож и дает ответ: Как получить шрифт по умолчанию для меток Swing JTabbedPane?

Я не совсем уверен, какой будет ключ, но после этого ответа вы можете попробовать:

UIManager.getLookAndFeelDefaults().getFont("ToggleButton.font");

EDIT

Это не фрагмент из связанного вопроса, но после небольшого тестирования он кажется эквивалентным:

UIManager.getDefaults().getFont("ToggleButton.font");

код, указанный в связанном вопросе.

РЕДАКТИРОВАТЬ 2

Я думаю, что нашел решение. По умолчанию возвращается простой шрифт, я обошел это в примере со строкой:

this.setFont(UIManager.getDefaults().getFont("ToggleButton.font").deriveFont(this.getFont().getStyle(), this.getFont().getSize()));

Мое предложение (чтобы это не было так уродливо) - добавить в ваш класс некоторые частные свойства стиля и размера шрифта по умолчанию (и вы можете установить их в конструкторе):

fontStyle = this.getFont().getStyle();
fontSize = this.getFont().getSize();

И тогда вы можете очистить с помощью:

this.setFont(UIManager.getDefaults().getFont("ToggleButton.font").deriveFont(this.fontStyle, this.fontSize));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...