Можем ли мы объединить 2 стиля шрифта вместе в Java?

Я пытаюсь изменить шрифт JLabel, чтобы он был и BOLD, и ITALIC, но, похоже, для этого не определено статическое поле. Как мы можем объединить два стиля, чтобы получить полужирный курсивный шрифт?

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

Font font = new Font("Verdana", Font.BOLD, 12);
label = new JLabel ("New Image") ;
label.setFont(font);
label.setForeground(Color.Gray.darker());

person Community    schedule 02.08.2011    source источник


Ответы (2)


Да, style рассматривается как битовая маска:

new Font("Verdana", Font.BOLD + Font.ITALIC, 12)
person trashgod    schedule 02.08.2011
comment
Побитовое или | предпочтительнее добавления (+) - person Hovercraft Full Of Eels; 02.08.2011
comment
@Hovercraft: Согласен. Как комментирует @Paŭlo, +, | и ^ в этом контексте эквивалентны. + может быть немного более читабельным, но это может говорить Паскаль. Жаль, что EnumSet было добавлено позже. - person trashgod; 02.08.2011
comment
@trashgod: здесь это работает так же, но использование + не является хорошей привычкой, так как это может не сработать позже, например, если код добавляет растровое изображение в тот, в котором уже было это растровое изображение (иногда реальная ситуация) . Например, если у меня есть переменная myFontStyles, в которой я хочу убедиться, что используется курсив, myFontStyles | Font.ITALIC всегда будет работать, тогда как добавление может привести к катастрофе. - person Hovercraft Full Of Eels; 02.08.2011
comment
@trashgod Почему такой неочевидный API? И никаких дополнительных настроек для курсива или жирного шрифта в существующем объекте Font. - person Saša Šijak; 15.05.2014
comment
@SašaŠijak: EnumSet мог быть лучшее представительство, но оно появилось несколько лет спустя; извините за задержку с ответом. - person trashgod; 11.09.2014

Из Документация API этого конструктора:

Параметры:

  • ...
  • style - константа стиля для шрифта. Аргумент стиля — это целочисленная битовая маска, которая может быть PLAIN, или побитовым объединением BOLD и/или ITALIC (например, ITALIC или BOLD|ITALIC). Если аргумент стиля не соответствует одной из ожидаемых целочисленных битовых масок, то для стиля устанавливается значение PLAIN.
  • ...

Таким образом, используйте

new Font("Verdana", Font.BOLD | Font.ITALIC, 12);

здесь.

person Paŭlo Ebermann    schedule 02.08.2011
comment
@trashgod: На самом деле нет никакой разницы между +, | и ^ в случае дизъюнктных битов, как здесь. (КУРСИВ = 2 = 2¹, ЖИРНЫЙ = 1 = 2⁰.) - person Paŭlo Ebermann; 02.08.2011
comment
Но это не очень хорошая привычка, так как вы легко столкнетесь с ситуациями, когда это действительно имеет значение, как указано в моем комментарии выше. - person Hovercraft Full Of Eels; 02.08.2011