0

我正在尝试在画有图形的板下添加一个 JLabel。我将 JLabel 的 x 和 y 位置设置在板下某处

    pName = new JLabel("Yoooooo");
    pName.setBounds(180,500,50,50);
    this.add(pName);

但是,当我运行代码时,我无法查看它。可能是什么原因?

编辑:现在我可以向 Andrew 查看它,但我无法将它定位到我想要的位置。

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

            }
        }
      }


 }

这是输出:

在此处输入图像描述

4

2 回答 2

1

一旦覆盖paint(Graphics g),您就可以自行绘制组件。这意味着无论您在外面做什么其他事情paint,它可能都不算什么,因为真正的绘画发生在您的自定义实现中,而不是默认实现中JPanel

于 2013-05-01T14:05:57.933 回答
0
  1. 我的第一个问题是我无法查看 JLabel 组件。根据安德鲁的评论,我解决了这个问题。如果您在面板中使用其他组件,则应使用paintComponent 以外的paint。

  2. 其次,我无法在我想要的地方查看我的 JLabel。所以为了给 JLabel 设置一个特定的位置,你应该将 JPanel 布局设置为空。this.setLayout(null) 解决了我的第二个问题。

于 2013-05-01T14:45:39.183 回答