当前位置: 首页 > 面试题库 >

JLabel不会与JPanel.setLayout(null)一起显示。为什么?

邴和雅
2023-03-14
问题内容

我想在地图上显示许多不同的标签,所以我在面板中使用空布局,并为每个标签调用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布局)的问题。它要求您设置所有组件的大小,否则它们将保留为默认的零大小,并且不会显示。这就是为什么使用布局管理器总是更好的原因。



 类似资料:
  • 我想在地图上显示许多不同的标签,所以我在面板中使用null布局,并为每个标签调用setLocation。但是,由于某些原因,标签没有显示出来。如果我把锅拿开。setLayout(null),则标签显示在面板的顶部中心。为什么null布局不能与setPosition一起工作?

  • 问题内容: 在我的一种方法中,我实例化了一个DOM,并且自从我使用以下方法转储它以来,似乎已正确初始化了它: 它输出应该存在的SOAP消息的有效和当前内容。 但是只有一个语句(之前和之后)显示为: 它们之间都显示完全 有效的内容 。 这对我来说没有意义…我想念什么? 根据评论中的建议进行更新:我将日志语句更改为 输出为: INFO:doc BEFORE = [#document:null],[#d

  • 我是MySQL的博士后新手。 我创建了一个表,其列“col”的默认值为null。 但是,在默认列中,没有任何内容表明它是空字段。 在模式输出中,默认值应该显示为null吗? 我也尝试了上面的相同示例,但使用了。键入时,Default列中没有显示任何内容。在该示例中,我插入一行,它获取默认值,因此我知道正在使用默认值(至少对于整数值)。更新:默认列实际上显示了99。我使用了自动完成\d并查看了错误的

  • 我试图在GUI中显示卡片,我希望重叠卡片以节省空间。然而,我似乎无法让它发挥作用。我目前正在使用MigLayout,但感觉它更像是一个JLabel问题,而不是其他问题。 要把它描述在一个高水平,考虑在现实生活中玩纸牌游戏。当你正常拿牌时,你只需要看到牌的一部分,因此牌的大部分被另一张牌重叠,以此类推,直到最后一张牌完全显示出来,因为上面没有任何东西。我想重叠的方式,只有一部分卡下面显示,然后顶部的

  • 问题内容: 我一直在尝试为我的Roguelike游戏添加一个JLabel。不幸的是,它似乎不起作用。到目前为止,这是我的代码: 我已经阅读了一些其他问题的解决方案,并且只需将JLabel添加到另一个解决方案中就可以完成。它不按这里的预期工作,为什么? PS:我不想为我的JPanel使用JLayeredPane。 问题答案: 不要使用组件(即JLabels)创建游戏环境。相反,您可以绘制所有游戏对象

  • 问题内容: 我早些时候发布了这个问题,并被告知将其设为SSCCE(如果我可以进行任何改进,随时告诉我):我想知道为什么当单击我的按钮“确认”时,旧方块消失了,重新绘制的方块不会出现在我的GUI(使用摆动制作)上。Squares类绘制200个间隔开的正方形,其中的ID(从String,0、1、2或3作为字符串)从另一个类获得(出于这个问题的目的,我们假设它始终为0,不包括该类)。为了澄清:Squar