簡體   English   中英

JFrame不顯示組件

[英]JFrame doesn't display components

我在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); 

感謝您的幫助

這是因為您在未指定任何寬度,長度或位置的情況下為窗口和面板設置了一個空布局,所以請使用一些LayoutManager或設置這些屬性(例如bounds)。 空的LayoutManager意味着您需要自己設置所有內容,因為沒有任何東西(沒有LayoutManager)會自動放置元素。 本示例使用BorderLayout,這會產生很好的效果:

在此處輸入圖片說明

編碼:

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);
    }
}

為什么需要這么多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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM