java - 将 JLabel 类绘制到另一个 JPanel 类时出现问题

标签 java swing jpanel paint jlabel

我创建了一个扩展 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 坐标,使其在屏幕上 float 。我无法让它将自己绘制到 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() 

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

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

关于java - 将 JLabel 类绘制到另一个 JPanel 类时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3007021/

相关文章:

Java 面板/框架图形不工作

java - 用户鼠标单击 Java 对象

java - 等到单击 JButton 后再结束方法

java - 如何在 Mac OS 中自定义 Java 应用程序的应用程序菜单

java - 在 Graphics2D 中旋转动画线 (Java)

java - 递归选择排序Java

java - 在java swing中注册外部字体的多种样式

java - NetBeans JForm源代码中的成员需要永远加载

java - 3 JFrame中的Jpanel,我的按钮不可见

java - 将txt文件读入数组,然后找到工资的最小值、最大值和平均值