从C驱动器加载Java代码中的映像

时间:2012-11-05 18:12:58

标签: java image swing jframe

我是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是否合法?

4 个答案:

答案 0 :(得分:5)

  • 请勿覆盖paint()
  • 中的JFrame
  • 请勿在{{1​​}}上致电setSize(),而是在设置可见之前使用JFrame
  • 养成使用 / 的习惯,不管平台如何支持。

这是我做的一个例子:

enter image description here

  • 创建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(),它将以您可能不需要的方式更改组件的行为。