Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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 为什么我的JComponent不绘制图像?_Java_Image_Swing_Jpanel_Jcomponent - Fatal编程技术网

Java 为什么我的JComponent不绘制图像?

Java 为什么我的JComponent不绘制图像?,java,image,swing,jpanel,jcomponent,Java,Image,Swing,Jpanel,Jcomponent,我现在正在进行一场比赛,到目前为止一直做得很好,但我现在遇到了麻烦。我有一个JFrame。我给它加了一个JPanel。JPanel由三个JC组件组成,它们应该用来画画。下面是我的代码:(注意,并不是所有的方法都显示出来) 这种方法可以把一切都安排好。我有两种其他的方法来绘制图像 class Paddle extends JComponent { public Image img = new ImageIcon("resources/paddle.png").getImage(); publi

我现在正在进行一场比赛,到目前为止一直做得很好,但我现在遇到了麻烦。我有一个JFrame。我给它加了一个JPanel。JPanel由三个JC组件组成,它们应该用来画画。下面是我的代码:(注意,并不是所有的方法都显示出来)

这种方法可以把一切都安排好。我有两种其他的方法来绘制图像

class Paddle extends JComponent {

public Image img = new ImageIcon("resources/paddle.png").getImage();

public int x;
public int y;

public Paddle(int x, int y) {
    this.x = x;
    this.y = y;
}

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(img, x, y, this);
}
}




class Ball extends JComponent {

public Image img = new ImageIcon("resources/ball.png").getImage();

public int x;
public int y;

public Ball(int x, int y) {
    this.x = x;
    this.y = y;
}

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawImage(img, x, y, this);
}
}

每当调用paintComponent时,我都会打印它,它确实打印了。唯一的问题是它不会把它漆在面板上。我唯一的猜测是构造器正在阻止它绘制。

有几个基本问题

  • JPanel
    默认情况下使用
    FlowLayout
  • FlowLayout
    使用组件的首选大小来确定如何布局它正在管理的组件
  • 您的组件不会覆盖
    getPreferredSize
    ,这意味着它们将返回
    0x0
  • 默认情况下,
    JPanel
    是不可调焦的,因此向其添加
    keysister
    并请求调焦将不会起什么作用。你应该考虑使用代替
  • JLabel
    支持绘制
    图标
    。您可以将
    图像
    包装在
    图像图标中
    添加将其与
    JLabel一起使用,以更简单地绘制图像
  • ImageIcon(“resources/ball.png”)
    表明所讨论的图像作为文件存储在磁盘上,但路径表明它们可能是嵌入式资源
    ImageIcon(String)
    希望引用是磁盘上的一个文件,它与程序的执行上下文相关

  • <> P>根据您想要实现的内容,您可能希望考虑编写自己的布局管理器,您可以使用它来控制子组件的位置,或者编写一个单独的“游戏表面”,使用自定义绘制来绘制游戏状态

    < P>有几个基本问题…

  • JPanel
    默认情况下使用
    FlowLayout
  • FlowLayout
    使用组件的首选大小来确定如何布局它正在管理的组件
  • 您的组件不会覆盖
    getPreferredSize
    ,这意味着它们将返回
    0x0
  • 默认情况下,
    JPanel
    是不可调焦的,因此向其添加
    keysister
    并请求调焦将不会起什么作用。你应该考虑使用代替
  • JLabel
    支持绘制
    图标
    。您可以将
    图像
    包装在
    图像图标中
    添加将其与
    JLabel一起使用,以更简单地绘制图像
  • ImageIcon(“resources/ball.png”)
    表明所讨论的图像作为文件存储在磁盘上,但路径表明它们可能是嵌入式资源
    ImageIcon(String)
    希望引用是磁盘上的一个文件,它与程序的执行上下文相关

  • <> P>根据您想要实现的内容,您可能希望考虑编写自己的布局管理器,您可以使用它来控制子组件的位置,或者编写一个单独的“游戏表面”,使用自定义绘制来绘制游戏状态

    < P>有几个基本问题…

  • JPanel
    默认情况下使用
    FlowLayout
  • FlowLayout
    使用组件的首选大小来确定如何布局它正在管理的组件
  • 您的组件不会覆盖
    getPreferredSize
    ,这意味着它们将返回
    0x0
  • 默认情况下,
    JPanel
    是不可调焦的,因此向其添加
    keysister
    并请求调焦将不会起什么作用。你应该考虑使用代替
  • JLabel
    支持绘制
    图标
    。您可以将
    图像
    包装在
    图像图标中
    添加将其与
    JLabel一起使用,以更简单地绘制图像
  • ImageIcon(“resources/ball.png”)
    表明所讨论的图像作为文件存储在磁盘上,但路径表明它们可能是嵌入式资源
    ImageIcon(String)
    希望引用是磁盘上的一个文件,它与程序的执行上下文相关

  • <> P>根据您想要实现的内容,您可能希望考虑编写自己的布局管理器,您可以使用它来控制子组件的位置,或者编写一个单独的“游戏表面”,使用自定义绘制来绘制游戏状态

    < P>有几个基本问题…

  • JPanel
    默认情况下使用
    FlowLayout
  • FlowLayout
    使用组件的首选大小来确定如何布局它正在管理的组件
  • 您的组件不会覆盖
    getPreferredSize
    ,这意味着它们将返回
    0x0
  • 默认情况下,
    JPanel
    是不可调焦的,因此向其添加
    keysister
    并请求调焦将不会起什么作用。你应该考虑使用代替
  • JLabel
    支持绘制
    图标
    。您可以将
    图像
    包装在
    图像图标中
    添加将其与
    JLabel一起使用,以更简单地绘制图像
  • ImageIcon(“resources/ball.png”)
    表明所讨论的图像作为文件存储在磁盘上,但路径表明它们可能是嵌入式资源
    ImageIcon(String)
    希望引用是磁盘上的一个文件,它与程序的执行上下文相关

  • 取决于你想要达到的目标,你可能希望考虑编写自己的布局管理器,你可以使用它来控制子组件的位置,或者写一个“游戏表面”,使用自定义绘制来绘制游戏状态

    调试时间。你在看电视吗
    class Paddle extends JComponent {
    
    public Image img = new ImageIcon("resources/paddle.png").getImage();
    
    public int x;
    public int y;
    
    public Paddle(int x, int y) {
        this.x = x;
        this.y = y;
    }
    
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(img, x, y, this);
    }
    }
    
    
    
    
    class Ball extends JComponent {
    
    public Image img = new ImageIcon("resources/ball.png").getImage();
    
    public int x;
    public int y;
    
    public Ball(int x, int y) {
        this.x = x;
        this.y = y;
    }
    
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(img, x, y, this);
    }
    }