【发布时间】:2012-07-24 23:39:17
【问题描述】:
这让我一整天都发疯了,所以我想我会把它贴在这里,看看其他人能否解决它。首先,我尝试添加背景图像,默认的 ImageIcon 不起作用,所以我改用了覆盖 paint 方法。 #
public class ImageJPanel extends JPanel {
private static final long serialVersionUID = -1846386687175836809L;
Image image = null;
public ImageJPanel(){
addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) {
ImageJPanel.this.repaint();
}
});
}
//Set the image.
public ImageJPanel(Image i) {
image=i;
setOpaque(false);
}
//Overide the paint component.
public void paint(Graphics g) {
if (image!=null) g.drawImage(image, 0, 0, null);
super.paint(g);
}
}
一旦我使用它就可以正常工作,但是现在我想将图像添加到我的按钮中,但它不起作用。以下是我的按钮的工作原理:
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Images images = new Images();
JPanel j = new ImageJPanel(images.menuBackground);
j.setLayout(null);
JButton Button_1= new JButton("Button_1",new ImageIcon("images/gui/Button.png"));
Insets insets = j.getInsets();
Dimension size = Button_1.getPreferredSize();
Button_1.setBounds(300 + insets.left, 150+ insets.top, size.width, size.height);
Singleplayer.setSize(200, 50);
j.add(Button_1);
frame.add(j);
frame.setSize(800,600);
frame.setResizable(false);
Button_1.addMouseListener(singleplayerPressed);
frame.setVisible(true);
我所有的图片都是.png,这会影响它吗?
【问题讨论】:
-
图片在哪里? PNG工作得很好。旁注,您应该覆盖
paintComponent()而不是paint()。还要确保在完成所有绘画之前调用super实现。 -
1) 对于
JPanel覆盖paintComponent(Graphics)而不是paint(Graphics)2) 使用Class.getResource(String)来定位图像等应用程序资源(代码提供了String,它将被解释为File路径。3) 为了尽快获得更好的帮助,请发布SSCCE。 4)请学习常用的Java naming conventions(特别是用于名称的大小写)用于类、方法和属性名称并始终如一地使用它。
标签: java image swing jframe embedded-resource