2015-08-28 3 views
0

Там панель. Я добавляю JLabel на эту панель и хочу знать размер этого JLabel.как получить текущую ширину метки

Вот простой код:

import java.awt.Dimension; 
import java.awt.Label; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 


class MyPanel extends JPanel { 

    MyPanel() { 
     this.setPreferredSize(new Dimension(300, 300));   
     Label myLabel = new Label("ddddddddd"); 
     this.add(myLabel);   
     System.out.println(myLabel.getPreferredSize().width);   
     System.out.println(myLabel.getSize().width); 
     System.out.println(myLabel.getMinimumSize().width); 
     System.out.println(myLabel.getMaximumSize().width); 
    } 
} 


class MyFrame extends JFrame { 

    MyFrame() {   
     this.setTitle("Test"); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
     this.add(new MyPanel());     
     this.pack(); 
     this.setVisible(true); 
    } 
} 


public class Text { 

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

      @Override 
      public void run() { 

       new MyFrame();     
      } 
     }); 
    } 
} 

Результаты не то, что я ожидал:

0.0 
0.0 
0.0 
32767.0 

В какой-то другой программе я использую «GetPreferredSize() ширину», и я получаю правильный результат но, к сожалению, у меня сейчас нет рабочего кода.

Может кто-нибудь объяснить, почему с «getPreferredSize(). Width« Я получаю ноль и как я могу получить ширину текущей метки?

+1

1) Не следует смешивать свинг и AWT компоненты вместе без уважительной причины. В этом случае вместо этого используйте 'JLabel'. 2) Этот код проверяет размер метки перед тем, как он будет «реализован на экране» и до того, как будет упакован фрейм. Сделайте оба эти вопроса перед запросом размера. 3) * «Как получить текущую ширину метки (?)» * Зачем вам это измерение? За более чем десятилетие разработки графических интерфейсов Swing мне нужно было запросить метку для ее размера точно (счетчик тщательно) ** 0 раз. ** –

ответ

3

java.swing.JLabel Используйте вместо java.awt.Label

JLabel myLabel = new JLabel("ddddddddd"); 

ВЫВОД:

63 
0 
63 
63 
+1

Huh .. Я удивляюсь, что переход от 'Label' к' JLabel' исправлен Это! –

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