我正在制作简单的登录屏幕。我在我的程序中在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();
}
}
我在运行程序时收到此输出:
当我最小化这个窗口并再次打开它时,我在这里获得所需的输出:
我做错了什么?
答案 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。