簡體   English   中英

JLabel不會與JPanel.setLayout(null)一起顯示。 為什么?

[英]JLabel won't show with JPanel.setLayout(null). Why?

我想在地圖上顯示許多不同的標簽,所以我在面板中使用空布局,並為每個標簽調用setLocation。 但是由於某種原因,標簽沒有顯示。 如果刪除pan.setLayout(null),則標簽將出現在面板的頂部中央。 為什么null布局不能與setPosition一起使用?

package mapa;

import java.awt.*;
import javax.swing.*;

public class Mapa extends JFrame {
  private static JPanel pan;
  private static JLabel lab;

  public Mapa() {
  }

  private static void createAndShowGUI() {
    Mapa frame = new Mapa();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    lab = new JLabel("TEXTO");
    lab.setBackground(Color.black);
    lab.setForeground(Color.white);
    lab.setOpaque(true);
    lab.setVisible(true);

    pan = new JPanel();
    pan.setLayout(null);
    pan.setPreferredSize(new Dimension(640,480));
    pan.add(lab);
    lab.setLocation(100, 100);

    frame.getContentPane().add(pan, BorderLayout.CENTER);
    frame.pack();
    frame.setVisible(true);
  }

  public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run() {
        createAndShowGUI();
      }
    });
  }
}

這是絕對定位(或null布局)的問題。 它要求您設置所有組件的大小,否則它們將保留為默認的零大小,並且不會顯示。 這就是為什么使用布局管理器總是更好的原因。

您必須顯式設置標簽的大小; 嘗試使用setBounds而不是setLocation 例如, lab.setBounds(100,100,200,30); 同樣也不需要調用setVisible(true); 在標簽上。

除非有充分的理由使用空布局,並且您完全知道自己在做什么,否則始終應該使用布局管理器作為起點。

暫無
暫無

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

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