2015-12-15 6 views
0

Я изначально создал объект JLabel и добавил его в JFrame, но контент не показывался. Я нашел сообщение на stackoverflow, используя контейнер для отображения JLabel на JFrame. Я тоже пробовал, но даже это не сработало. Я прошел через много сообщений, но я не мог найти никакого решения. Кнопка отображается, но Jlabel не может быть видно!JLabel не появляется?

Dimension s=new Dimension(400,400); 
    JFrame l=new JFrame(); 
    l.setSize(s); 
    l.setResizable(true); 
    Dimension s1=new Dimension(100,100); 
    Container me=new Container(); 
    JLabel kingsman=new JLabel ("kingsman"); 

    me.add(kingsman); 
    l.add(me); 

    JButton p=new JButton("Goal"); 
    p.setSize(s1); 
    l.add(p); 
    //l.pack(); 
    l.setVisible(true); 

Существует еще один problem.When я называю pack() функцию, Jframe становится сводится к небольшому окну вместо измерения, которое я упомянул. Пожалуйста, помогите!

ответ

2

Причина, по которой этикетка не отображается, заключается в том, что в области содержимого JFrame используется BorderLayout как ее LayoutManager. Когда вы вызываете l.add(me), а затем l.add(p), вы эффективно заменяете экземпляр Container кнопкой. Попробуйте изменить вас Container на JPanel, добавьте к нему как элементы ярлыка, так и кнопки, а затем добавьте их в панель содержимого вашего фрейма. Читайте на Layout Managers, too.

В следующем примере показана JPanel, содержащий JLabel и JButton расположены с использованием JPanel's по умолчанию LayoutManager из FlowLayout.

+0

Что произойдет, если я непосредственно добавлю Jlabel к кадру без использования контейнера? –

+2

@MathewsMathai Ничего (или более того, то же самое), 'JFrame' является контейнером (на самом деле у него есть' JRootPane', у которого есть 'contentPane', и он добавляет к нему что-то) – MadProgrammer

+1

Если вы хотите добавьте непосредственно к фрейму, вам придется применить некоторые позиционные ограничения. Как указано, используемый «LayoutManager» является «BorderLayout», поэтому вместо вызова «frame.add (label)» и «frame.add (button)» вы можете сделать «frame.add (label, BorderLayout.NORTH) 'и' frame.add (кнопка, BorderLayout.CENTRE) '. С точки зрения дизайна я бы предложил использовать JPanel с соответствующим 'LayoutManager' для вашего контента, а затем добавить панель в фрейм. – PA001