2013-07-26 2 views
3

Я пытался изменить размер шрифта JLabel, я пытался установить Font, но он всегда такой же!Изменение JLabel Размер шрифта

Вот некоторые из кода:

@Override 
public void paint(Graphics g) { 
super.paint(g); 
Container cont=this.getContentPane(); 
intro=new JLabel("משחק זיכרון"); 
intro.setForeground(Color.YELLOW); 
intro.setFont(intro.getFont().deriveFont(64.0f)); 
intro.setHorizontalAlignment(SwingConstants.CENTER); 
cont.add(intro); 
    } 
+0

Это уже ответил: http://stackoverflow.com/questions/2715118/how-to-change-the -размер от шрифта-of-a-jlabel-to-take-the-maximum-size – Undefined

+0

Я видел это! но все равно не полезны все методы, которые они описывают, я использую это! –

+0

Не рекомендуется менять свойства вашего виджета в методе 'paint'. На этом этапе кода вы должны сделать так, чтобы объект рисовал по мере его настройки. Если вы хотите изменить свойства метки, вы должны сделать это где-то еще в своем коде. – Laf

ответ

8

Вы вызываете неправильный deriveFont метод.

Параметр в deriveFont(int) - это стиль (жирный, курсив и т. Д.). Метод, который вы ищете, - deriveFont(float).

В вашем случае необходимо внести только одно изменение: intro.setFont(intro.getFont().deriveFont(64.0f));.

Вот краткий пример кода, который действительно показывает этикетку с размером шрифта 64:

JFrame frame = new JFrame ("Test"); 
JLabel label = new JLabel ("Font Test"); 
label.setFont (label.getFont().deriveFont (64.0f)); 
frame.getContentPane().add (label); 
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE); 
frame.pack(); 
frame.setVisible (true); 
+0

это ничего не меняет !! –

+0

@ fayezabd-alrzaqdeab Если вы попробуете то же самое, но с латинскими символами, это имеет значение? – Laf

+0

если я перейду на латинский, все-таки одно и то же! –

5

Не следует путать deriveFont метод, который ожидает аргумент стиля над тем, что expects a font size. Тот, который вы используете, использует аргумент стиля и не влияет на фактический размер шрифта. Вместо этого используйте

intro.setFont(intro.getFont().deriveFont(64f)); 

Также не добавляйте компоненты в метод paint. Ваше приложение в реальном времени не отобразит JLabel, пока не будет выполнена перекраска. Переопределение paint (вернее, paintComponent для Swing) предназначено для индивидуальной покраски, но добавочные компоненты не могут быть квалифицированы как таковые. Приложение будет иметь накладные расходы на добавляемый компонент каждый раз a repaint делается.

Пример:

enter image description here

public class LabelDemo { 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       JFrame frame = new JFrame("Label Test"); 
       frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
       JLabel intro = new JLabel("משחק זיכרון"); 
       frame.add(intro); 
       intro.setFont(intro.getFont().deriveFont(64f)); 
       frame.pack(); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 
+0

спасибо Я нашел проблему! это не то, как Iv'e написал код, но я не знал достаточно! –

Смежные вопросы