我有关于jframe和jlabel的一些问题?

时间:2016-09-27 05:25:03

标签: java jframe jlabel

我正在制作简单的登录屏幕。我在我的程序中在JFrame中添加了两个JLabel并且它运行成功但问题是当我运行程序时我得到了空白屏幕和空的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

我做错了什么?

4 个答案:

答案 0 :(得分:2)

在添加jframe中的所有项目后,您必须放置cpec.setVisible(true);。我希望这肯定会解决您的问题

答案 1 :(得分:1)

您已在很早的阶段设置了JFrame的可见性。那时没有添加JLabel。当您最小化并调整框架大小时,它会再次渲染,从而显示您添加的组件。 请记住在设置Frame的可见性(最后设置可见性)之前添加组件。

另外,我建议你在使用swing组件时使用GUI线程。请参阅此处的swing实用程序:https://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html

最后,当您尝试使用setBounds()方法将标签添加到特定坐标时,将JFrame的布局设置为null。

答案 2 :(得分: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);

答案 3 :(得分:0)

将容器的布局管理器设置为null。默认情况下,它使用BorderLayout作为其布局管理器。您只需使用JFrame的引用调用getContentPane()方法,该引用返回容器引用。例如:

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

有关详情,请访问my Website