Java 为什么可以';我是否可以在使用图形时查看添加到JPanel的JLabel?
我试图在涂有图形的电路板下添加一个JLabel。我将JLabel的x和y位置设置在板下的某个位置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); 似
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。