2016-09-27 1 views
2

Я делаю простой экран входа. Я добавил два JLabel в JFrame в моей программе, и он работает успешно, но проблема в том, что при запуске программы я получил пустой экран и пустой jframe, однако я добавил два jlabel в этом фрейме, но он не показывает мне ничего, а затем if Я минимизирую окно, и через некоторое время, если я открою это окно, я увижу эти компоненты.У меня возникли проблемы с jframe и jlabel?

Вот мой код:

package javaapplication41; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.*; 

public class JavaApplication41 { 


    JavaApplication41() 
    { 
     JFrame cpec=new JFrame(); 
     cpec.setBounds(300,200,600,350); 
     cpec.setUndecorated(false); 
     cpec.setVisible(true); 
     cpec.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      JLabel l = new JLabel(new ImageIcon("C:\\Users\\MUHAMMAD SHAHAB\\Documents\\NetBeansProjects\\Real Estate\\src\\real\\estate\\file (2).jpg")); 
      l.setBounds(100,100,200,125); 
      //l.setLayout(null); 
      cpec.add(l);    
      JLabel kiq=new JLabel(new ImageIcon("C:\\Users\\MUHAMMAD SHAHAB\\Documents\\NetBeansProjects\\Real Estate\\src\\real\\estate\\bla.jpg")); 
       kiq.setBounds(100,100,100,100); 
       //kiq.setLayout(null); 
     l.add(kiq); 
    } 
    public static void main(String[] args) { 
     JavaApplication41 ne=new JavaApplication41(); 
    } 

} 

Я получаю этот вывод, когда я запускаю программу:

blank window

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

enter image description here

что я делаю неправильно?

ответ

2

Вы должны поставить cpec.setVisible(true); после добавления всех элементов в ваших jframe.I надеюсь, что это, безусловно, решить вашу проблему

1

Вы установили видимость JFrame на очень ранней стадии. В то время JLabel не был добавлен. Когда вы минимизировали и изменяли размер вашего фрейма, он снова отображался, что приводило к показу ваших добавленных компонентов. Не забудьте добавить компоненты перед установкой видимости рамки (установите видимость, наконец).

Также я предлагаю вам использовать потоки графического интерфейса при работе с компонентами swing. Обратитесь к качаниям здесь: https://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html

Наконец-то задано расположение JFrame равным нулю, поскольку вы пытаетесь добавить метки к определенным координатам с помощью метода setBounds().

1

По умолчанию макет jframe равен BorderLayout, поэтому, если вы хотите, вы можете изменить макет по ссылке java.awt.Container абстрактный класс.

Инициализирован getContentPane() из javax.swing.JFrame класс. Компоненты добавляются только через ссылку java.awt.Container класс.

java.awt.Container c=cpec.getContentPane(); 
c.setLayout(new FlowLayout(FlowLayout.LEFT)); 
c.add(l); //label will get added to JFrame instance that is referenced 
//then define size and at last define visibility 
cpec.setSize(500, 500); 
cpec.setVisible(true); 
0

Установить менеджер компоновки контейнера в нуль. По умолчанию он использует BorderLayout в качестве менеджера макета. Вам просто нужно вызвать метод getContentPane(), используя ссылку JFrame, которая возвращает ссылку на контейнер. Пример:

Container c = frame.getContentPane(); 
c.setLayout(null); 

Для получения дополнительной информации вы можете пройти my Website.

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