我有一些关于 jframe 和 jlabel 的问题?
I am having some issues regarding jframe and jlabel?
我正在制作简单的登录屏幕。我在我的程序中的 JFrame 中添加了两个 JLabel,它 运行 成功了,但问题是,当我 运行 程序时,我得到了空白屏幕和空的 jframe,但是我在那个框架中添加了两个 jlabel 但是它没有显示任何东西,然后如果我最小化 window,一段时间后如果我再次打开 window,我就可以看到那些组件。
这是我的代码:
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();
}
}
我在 运行 程序时得到这个输出:
当我最小化这个 window 并再次打开它时,我在这里得到了想要的输出:
我做错了什么?
您很早就设置了 JFrame 的可见性。那时还没有添加 JLabel。当您最小化框架并调整其大小时,它会再次渲染,从而显示您添加的组件。
记得在设置Frame的可见性之前添加组件(最后设置可见性)。
另外,我建议您在处理 swing 组件时使用 GUI 线程。请在此处参考 swing 实用程序:https://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
最后将 JFrame 的布局设置为空,因为您正在尝试使用 setBounds() 方法将标签添加到特定坐标。
jframe 的默认布局是 BorderLayout
,因此如果您需要,可以通过参考 java.awt.Container
摘要 class.
更改布局
由javax.swing.JFrame
class的getContentPane()
初始化。
仅通过引用 java.awt.Container
class.
添加组件
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);
您必须在添加所有项目后添加 cpec.setVisible(true);
jframe.I 希望这一定能解决您的问题
将容器的布局管理器设置为空。默认情况下,它使用 BorderLayout 作为其布局管理器。您只需使用 JFrame 的引用调用 getContentPane()
方法,其中 returns 是一个容器引用。示例:
Container c = frame.getContentPane();
c.setLayout(null);
有关详细信息,您可以浏览 my Website。
我正在制作简单的登录屏幕。我在我的程序中的 JFrame 中添加了两个 JLabel,它 运行 成功了,但问题是,当我 运行 程序时,我得到了空白屏幕和空的 jframe,但是我在那个框架中添加了两个 jlabel 但是它没有显示任何东西,然后如果我最小化 window,一段时间后如果我再次打开 window,我就可以看到那些组件。
这是我的代码:
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();
}
}
我在 运行 程序时得到这个输出:
当我最小化这个 window 并再次打开它时,我在这里得到了想要的输出:
我做错了什么?
您很早就设置了 JFrame 的可见性。那时还没有添加 JLabel。当您最小化框架并调整其大小时,它会再次渲染,从而显示您添加的组件。 记得在设置Frame的可见性之前添加组件(最后设置可见性)。
另外,我建议您在处理 swing 组件时使用 GUI 线程。请在此处参考 swing 实用程序:https://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
最后将 JFrame 的布局设置为空,因为您正在尝试使用 setBounds() 方法将标签添加到特定坐标。
jframe 的默认布局是 BorderLayout
,因此如果您需要,可以通过参考 java.awt.Container
摘要 class.
由javax.swing.JFrame
class的getContentPane()
初始化。
仅通过引用 java.awt.Container
class.
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);
您必须在添加所有项目后添加 cpec.setVisible(true);
jframe.I 希望这一定能解决您的问题
将容器的布局管理器设置为空。默认情况下,它使用 BorderLayout 作为其布局管理器。您只需使用 JFrame 的引用调用 getContentPane()
方法,其中 returns 是一个容器引用。示例:
Container c = frame.getContentPane();
c.setLayout(null);
有关详细信息,您可以浏览 my Website。