1

マップ上にさまざまなラベルを表示したいので、パネルでnullレイアウトを使用し、ラベルごとに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();
      }
    });
  }
}
4

2 に答える 2

7

これは、絶対配置 (またはnullレイアウト) の問題です。すべてのコンポーネントのサイズを設定する必要があります。そうしないと、デフォルトのゼロサイズのままになり、表示されません。そのため、常にレイアウト マネージャーを使用することをお勧めします。

于 2013-01-14T00:22:58.900 に答える
2

ラベルのサイズを明示的に設定する必要があります。setBoundsの代わりに使ってみてくださいsetLocation。たとえば、また、ラベルlab.setBounds(100,100,200,30);を呼び出す必要はありません。setVisible(true);

null レイアウトを使用する十分な理由がなく、自分が何をしているのかを正確に把握している場合を除き、常にレイアウト マネージャーを使用することから始めるべきです。

于 2013-01-14T00:22:59.853 に答える