JFrame不显示组件

时间:2017-08-22 09:19:56

标签: java swing jframe

我在JFrame上显示组件时遇到问题。我正在关闭当前窗口并打开新窗口,并希望在其上显示jLabel但没有任何事情发生。代码如下:

               Frame[] nF = DBChooser.getFrames(); 

                nF[0].setVisible(false);
                JFrame windoow = new JFrame("Processing");                       
                JPanel pan = new JPanel(); 
                windoow.setPreferredSize(new Dimension(400, 150));  
                pan.setPreferredSize(new Dimension(400, 150));                  

                JLabel textLabel = new JLabel ("Processing...");   
                textLabel.setLayout(null);
                pan.setLayout(null);
                windoow.setLayout(null);                   
                pan.add(textLabel);
                pan.revalidate();
                pan.repaint();                 
                windoow.getContentPane().add(pan); 
                windoow.setLocationRelativeTo(null);                    
                windoow.pack();                  
                windoow.setVisible(true); 

我感谢任何帮助

2 个答案:

答案 0 :(得分:1)

这是因为你设置了一个空布局到窗口和面板而没有指定任何宽度,长度或位置,要么使用一些LayoutManager或设置这些属性(例如边界)。 null LayoutManager意味着您需要自己设置所有内容,因为没有任何内容(没有LayoutManager)可以自动放置元素。此示例使用BorderLayout,它可以创建一个很好的效果:

enter image description here

代码:

import java.awt.BorderLayout;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Test {
    public static void main(String[] args) {
        JFrame windoow = new JFrame("Processing");
        JPanel pan = new JPanel();
        windoow.setPreferredSize(new Dimension(400, 150));
        pan.setPreferredSize(new Dimension(400, 150));

        JLabel textLabel = new JLabel("Processing...");
        textLabel.setLayout(null);
        pan.setLayout(new BorderLayout());
        windoow.setLayout(new BorderLayout());
        pan.add(textLabel);
        pan.revalidate();
        pan.repaint();
        windoow.getContentPane().add(pan);
        windoow.setLocationRelativeTo(null);
        windoow.pack();
        windoow.setVisible(true);
    }
}

答案 1 :(得分:1)

为什么你需要这么多setLayout(null);?我删除它们并且有效

public class DBChooser extends Frame {

    public static void main(String args[]) {
        Frame[] nF = DBChooser.getFrames();
//      nF[0].setVisible(false);
        JFrame windoow = new JFrame("Processing");
        JPanel pan = new JPanel();
        windoow.setPreferredSize(new Dimension(400, 150));
        pan.setPreferredSize(new Dimension(400, 150));
        JLabel textLabel = new JLabel("Processing...");
//      textLabel.setLayout(null);
//      pan.setLayout(null);
//      windoow.setLayout(null);                   
        pan.add(textLabel);
        pan.revalidate();
        pan.repaint();
        windoow.getContentPane().add(pan);
        windoow.setLocationRelativeTo(null);
        windoow.pack();
        windoow.setVisible(true);
    }
}