Java 为什么可以';我是否可以在使用图形时查看添加到JPanel的JLabel?

Java 为什么可以';我是否可以在使用图形时查看添加到JPanel的JLabel?,java,swing,layout,jlabel,Java,Swing,Layout,Jlabel,我试图在涂有图形的电路板下添加一个JLabel。我将JLabel的x和y位置设置在板下的某个位置 pName = new JLabel("Yoooooo"); pName.setBounds(180,500,50,50); this.add(pName); 但是,当我运行代码时,我无法查看它。原因可能是什么 编辑:现在我可以查看它的thx安德鲁,但我不能找到它的位置,我想要的 JLabel应该在板下 pName.setBounds(180,500,50,50); 似

我试图在涂有图形的电路板下添加一个JLabel。我将JLabel的x和y位置设置在板下的某个位置

    pName = new JLabel("Yoooooo");
    pName.setBounds(180,500,50,50);
    this.add(pName);
但是,当我运行代码时,我无法查看它。原因可能是什么

编辑:现在我可以查看它的thx安德鲁,但我不能找到它的位置,我想要的

JLabel应该在板下

pName.setBounds(180,500,50,50); 
似乎不起作用。为什么会这样

public class EnemyPanel extends JPanel{

private char enemyBoard[][] = new char[10][10]; //to keep state of squares
private Rectangle r[][] = new Rectangle[10][10];//to give coordinates and boundaries to squares
private int size;
private JLabel pName; 

public EnemyPanel()
{
    size=Constant.rectSize;
    for(int i=0;i<10;i++){
        for(int j=0;j<10;j++){
            enemyBoard[i][j]='*'; //initialization type
            r[i][j]= new Rectangle(j*size+30,i*size+30, size, size);         
        }
    }
    pName = new JLabel("Yoooooo");
    pName.setBounds(180,500,50,50);
    this.add(pName);

}

 public void paint(Graphics g){
        super.paintComponent(g);

        for(int i=0;i<10;i++){
            for(int j=0;j<10;j++){
                if(enemyBoard[i][j]=='!'){
                    //hit square's color is changed to white
                    g.setColor(Color.white);
                }
                else if(enemyBoard[i][j]=='$')
                    //miss square's color is changed to gray
                     g.setColor(Color.gray);
                else
                    //undiscovered ones are green
                    g.setColor(Color.green);
                g.fill3DRect((int)r[i][j].getX() ,(int)r[i][j].getY(),(int)r[i][j].getWidth(), (int)r[i][j].getHeight(), true);

            }
        }
      }


 }
公共类EnemyPanel扩展了JPanel{
私有字符enemyBoard[][]=新字符[10][10];//保持方块状态
私有矩形r[][]=新矩形[10][10];//为正方形提供坐标和边界
私有整数大小;
私人JLabel pName;
公共EnemyPanel()
{
大小=常量。矩形大小;

对于(int i=0;i一旦覆盖了
paint(Graphics g)
,您就可以自己绘制组件了。这意味着,无论您在
paint
之外做了什么其他工作,它都可能不会像在自定义实现中实际绘制一样重要,而不是在默认的
JPanel
实现中

  • 我的第一个问题是无法查看JLabel组件。 根据安德鲁的评论,我解决了这个问题。 如果要在面板中使用其他组件,则应使用paint组件而不是paint组件

  • 其次,我无法在我想要的地方查看我的JLabel。因此,为了将特定位置设置为JLabel,应该将JPanel布局设置为null。 这个.setLayout(null)解决了我的第二个问题


  • 为了更快地获得更好的帮助,发布一个.extends JPanel{..public void paint(Graphics g){super.paintComponent(g);
    应该是
    。.extends JPanel{..public void paintComponent(Graphics g g){.super.paintComponent(g);
    谢谢安德鲁,你太棒了!安德鲁,它不在乎这个pName.setBounds(180500,50,50);它只是把标签放在图形上方。这是为什么?好吧,我这次读得更仔细了,解决了我的问题。我现在就写下来作为答案。谢谢你,安德鲁。=)你可以(而且大多数时候应该)在你的覆盖
    绘制(图形g)中始终调用
    super.paint(g);
    方法,然后再进行自己的绘制工作。在
    完成此操作之前,一切都很顺利。setLayout(null)
    。使用布局可以获得可靠和健壮的GUI。