我创建了一个扩展JLabel的类,以用作在游戏的JPanel周围移动的对象。

import javax.swing.*;

public class Head extends JLabel {

 int xpos;
 int ypos;

 int xvel;
 int yvel;

 ImageIcon chickie = new ImageIcon(
        "C:\\Users\\jjpotter.MSDOM1\\Pictures\\clavalle.jpg");
 JLabel myLabel = new JLabel(chickie);

 public Head(int xpos, int ypos, int xvel, int yvel){

  this.xpos = xpos;
  this.ypos = ypos;
  this.xvel = xvel;
  this.yvel = yvel;
 }

 public void draw(){
  myLabel.setLocation(xpos, ypos);
 }

 public double getXpos() {
  return xpos;
 }

 public double getYpos() {
  return ypos;
 }

 public int getXvel() {
  return xvel;
 }

 public int getYvel() {
  return yvel;
 }

 public void setPos(int x, int y){

  xpos = x;
  ypos = y;

 }

}


然后,我试图将其添加到我的JPanel中。从这里开始,我将随机增加它的x和y坐标,使其在屏幕上浮动。我无法将其绘制到JPanel上。我知道这里缺少一个关键概念,涉及在不同面板上绘制组件。这是我的GamePanel类中的内容

import java.awt.Dimension;
import java.util.Random;
import javax.swing.*;


public class GamePanel extends JPanel {

 Random myRand = new Random();
 Head head = new Head(20,20,0,0);

 public GamePanel(){

  this.setSize(new Dimension(640, 480));
  this.add(head);

 }

}


关于如何将其添加到JPanel的任何建议?另外,这是让游戏随机在屏幕上浮动图片的好方法吗?

最佳答案

首先,不需要扩展JLabel即可做到这一点。

a)使用以下方法将图像添加到标签后,设置标签的大小:

label.setSize( label.getPreferredSize() );


b)您不需要draw()和所有的setter方法。要移动标签,只需执行以下操作:

label.setLocation(...);


c)如果您想增加位置,可以使用类似以下的方法:

label.setLocation(label.getLocation()。x + 5,...);

设置标签的大小和位置后,可以将其直接添加到面板中。确保您已完成:

panel.setPreferredSize()


当您将面板添加到框架的内容窗格时。

您的代码太含糊,无法给出具体建议。如果您需要更多帮助,请发布您的SSCCE。您的问题可能是布局管理器的使用或您没有使用布局管理器的事实。

07-24 09:45
查看更多