Java 为什么我的JComponent不绘制图像?
我现在正在进行一场比赛,到目前为止一直做得很好,但我现在遇到了麻烦。我有一个JFrame。我给它加了一个JPanel。JPanel由三个JC组件组成,它们应该用来画画。下面是我的代码:(注意,并不是所有的方法都显示出来) 这种方法可以把一切都安排好。我有两种其他的方法来绘制图像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
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);
}
}