我是Java的新手,我目前正在创建一个带图形的游戏。我有这个类从JFrame
延伸。在这堂课中,我有很多需要图像作为背景的JPanel
个。据我所知,为了能够在JPanel中绘制图像,我需要一个从JPanel扩展的单独类,并且该类的paintComponent
方法将完成这项工作。但我不想为每个JPanel
分别开设课程,我的课程太多了;而且我只关心背景。我怎样才能做到这一点?它是一个匿名的内部类?怎么样?
为了更好地理解,我提供了一些代码:
public GUI extends JFrame {
private JPanel x;
...
public GUI() {
x = new JPanel();
// put an image background to x
}
答案 0 :(得分:3)
你不必为它做另一个课程吗?你可以这么做:
x = new JPanel(){
public void paintComponent(Graphics g){
super.paintComponent(g);
//draw background image
}
};
答案 1 :(得分:3)
为什么不创建一个带有Image
??
public class ImagePane extends JPanel {
private Image image;
public ImagePane(Image image) {
this.image = image;
}
@Override
public Dimension getPreferredSize() {
return image == null ? new Dimension(0, 0) : new Dimension(image.getWidth(this), image.getHeight(this));
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
g2d.drawImage(image, 0, 0, this);
g2d.dispose();
}
}
您甚至可以提供有关应该在哪里绘制的提示。
这样,你可以在需要时简单地创建一个实例
<强>更新强>
另一个问题是,为什么?
您可以使用JLabel
为您绘制图标而无需任何其他工作......
有关详细信息,请参阅How to use labels ...
这实际上是一个坏主意,因为JLabel
在计算它的首选大小时不使用它的子组件,它只在确定时使用图像的大小和文本属性它的首选尺寸,这可能导致组件尺寸不正确
答案 2 :(得分:1)
您可以单行执行此操作:
panelInstance.add(new JLabel(new ImageIcon(ImageIO.read(new File("Image URL")))));
我希望它对你有用。