我是Java的新手。我只是想在JFrame
中加载图片作为背景。我想要做的是从C盘获取图像(这不是我的工作区)所以我在Board.java
做了什么:
ImageIcon i = new ImageIcon("C:/image.png");
img =i.getImage();
并尝试将其绘制成如下:
public void paint(Graphics g )
{
super.paint(g);
Graphics2D g2d= (Graphics2D) g;
g2d.drawImage(img, 0, 100, null);
}
然后我就像这样在我的主要课堂上打电话
public static void main(String[] args)
{
JFrame frame= new JFrame(" Game") ;
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1200, 365);
frame.setVisible(true);
frame.add(new Board());
}
但是我没有显示任何图像,添加Image
是否合法?
答案 0 :(得分:5)
paint()
JFrame
setSize()
,而是在设置可见之前使用JFrame
这是我做的一个例子:
JFrame#pack()
/ JPanel
实例JLabel
/ paintComponent(..)
JPanel
JLabel
以返回尺寸正确为getPreferredSize()
Image
/ JPanel
添加到Jlabel
实例JFrame
JFrame
JFrame#pack()
可见<强> Test.java:强>
JFrame
答案 1 :(得分:0)
使用此格式位置
C:\\1.png
答案 2 :(得分:0)
使用Swing,您必须使用paintComponent()代替paint()。
答案 3 :(得分:0)
在您的代码中:
将frame.add(new Board());
移至frame.setVisible(true);
之前,即:
另外,添加frame.pack();
public static void main(String[] args)
{
JFrame frame= new JFrame("Game") ;
frame.add(new Board());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(1200, 365);
frame.pack();
frame.setVisible(true);
}
将JFrame设置为可见后,只有事件派发线程才会触及它。
作为旁注,请覆盖paintComponent()
而不是paint()
,除非您确切知道自己在做什么:http://docs.oracle.com/javase/tutorial/uiswing/painting/closer.html
要点是paint()
实际上负责调用以下内容:paintComponent()
,paintBorder()
和paintChildren()
。因此,如果您只是盲目地覆盖paint()
,它将以您可能不需要的方式更改组件的行为。