Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将JLabel添加到JPanel中的问题_Java_Swing - Fatal编程技术网

Java 将JLabel添加到JPanel中的问题

Java 将JLabel添加到JPanel中的问题,java,swing,Java,Swing,我希望在JPanel上显示一个图像,但是当我运行代码时,面板是空白的。我尝试的方法是一个稍微修改过的版本 我已经确认代码中的所有方法实际上都是使用println调用的。我的框架和面板是可见的,我相当确定我已经将图标和标签添加到了标签中。我错过了什么 我的代码的相关部分: public class SYSTEM public static void start() { GameFrame GF = new GameFrame(); GamePanel GP = new Game

我希望在JPanel上显示一个图像,但是当我运行代码时,面板是空白的。我尝试的方法是一个稍微修改过的版本

我已经确认代码中的所有方法实际上都是使用
println
调用的。我的框架和面板是可见的,我相当确定我已经将图标和标签添加到了标签中。我错过了什么

我的代码的相关部分:

public class SYSTEM
  public static void start() {
    GameFrame GF = new GameFrame();
    GamePanel GP = new GamePanel();
    GF.add(GP);
    GP.loadSprite("Player", new Dimension(0,0));
  }
}

public class GameFrame extends JFrame {
  public GameFrame() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(SYSTEM.windowSize);
    setVisible(true);
  }
}

public class GamePanel extends JPanel {
  ArrayList<Sprite> sprites = new ArrayList<Sprite>();
  GamePanel() {
    setVisible(true);
    setSize(SYSTEM.windowSize);
    setLayout(null);
  }
  public void loadSprite(String spriteName, Dimension pos) {
    sprites.add(new Player());
    add(sprites.get(0).getIcon());
}

public class Sprite {
  protected JLabel icon;
  protected BufferedImage image;
  protected String filePath;
  protected Dimension pos;
  public JLabel getIcon() {
    return icon;
  }
}

public class Player extends Sprite {
  public Player() {
    filePath = "FILEPATH_OMITTED";
    pos = new Dimension(0,0);
    try {                
        image = ImageIO.read(new File(filePath));
    } catch (IOException e) {
        System.out.println(e);
    }
    icon = new JLabel(new ImageIcon(image));
  }
}
公共类系统
公共静态void start(){
GameFrame GF=新游戏框架();
GamePanel GP=新GamePanel();
GF.add(GP);
总成loadSprite(“玩家”,新维度(0,0));
}
}
公共类游戏框架扩展了JFrame{
公共游戏框架(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
设置大小(SYSTEM.windowSize);
setVisible(真);
}
}
公共类游戏面板扩展了JPanel{
ArrayList精灵=新建ArrayList();
游戏面板(){
setVisible(真);
设置大小(SYSTEM.windowSize);
setLayout(空);
}
公共void loadSprite(字符串spriteName,维度位置){
添加(新玩家());
添加(sprites.get(0.getIcon());
}
公共级雪碧{
受保护的JLabel图标;
受保护的缓冲图像;
受保护的字符串文件路径;
保护尺寸位置;
公共JLabel getIcon(){
返回图标;
}
}
公共类玩家扩展精灵{
公共玩家(){
filePath=“filePath\u省略”;
pos=新尺寸(0,0);
试试{
image=ImageIO.read(新文件(filePath));
}捕获(IOE异常){
系统输出打印ln(e);
}
图标=新JLabel(新图像图标(图像));
}
}

不要在游戏中使用组件,您已经扔掉了负责确定组件大小和位置的布局管理器,但您没有对此进行补偿。我建议您使用自定义绘制方法,请参见和


我很清楚,您的问题与
setLayout(null)直接相关
这是不好的,不管你在做什么

不要在游戏中使用组件,你已经扔掉了布局管理器,它负责确定组件的大小和位置,但是你没有补偿它。我建议你改为使用自定义绘制方法,请参见和


我很清楚,您的问题与
setLayout(null);
直接相关,无论您在做什么,这都是不好的

这是您的文件:
filePath=“filePath\u省略”;
?不是像
path/image.png
?在使框架可见之前将面板添加到框架中。不要为JPanel使用空布局。路径可能是错误的,但我们不知道,因为您忽略了它:)替换
System.out.println(e);
使用
抛出新的运行时异常(e)
。如果无法加载映像,您不希望应用程序继续运行…对吗?这是您的文件:
filePath=“filePath\u省略”;
?不是像
path/image.png
?在使框架可见之前将面板添加到框架中。不要为JPanel使用空布局。路径可能是错误的,但我们不知道,因为您忽略了它:)替换
System.out.println(e);
使用
抛出新的运行时异常(e);
。如果无法加载映像,您不希望应用程序继续运行……对吗?