【问题标题】:Trying to paint an image in java尝试在java中绘制图像
【发布时间】:2015-05-19 15:14:59
【问题描述】:
int x = 0;
int y = 0;
Image img;
Screen screen;

GamePanel() {
    setBounds(0, 0, 600, 600);
    setLayout(null);
    setVisible(true);
    setBackground(new Color(100, 0, 0));

    screen = new Screen();
    screen.setBounds(0, 0, 600, 600);
    add(screen);

    img = Toolkit.getDefaultToolkit().createImage("monster.jpg");   
}

public void repaintScreen(){
    screen.repaint();
}

private class Screen extends JLabel{

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        g.setColor(Color.BLACK);
        g.drawRect(10, 10, 100, 100);

        g.drawImage(img, 0, 0, this);
    }   
}

您好,我正在尝试绘制图像,但它永远无法正常工作。我还尝试以不同的方式加载图像,但始终相同。但是没有警告,所以出现了类似的东西。 但是当我把它作为一个图标放在 JLable 中时,它就可以工作了。

【问题讨论】:

  • 为什么? JLabel 已经支持显示图片...
  • 是的,这就是为什么我的类 Screen 从标签扩展
  • 但是为什么不直接使用setIcon呢?为什么需要自己绘制图像?
  • 因为我后来有更多的照片,并认为会更好,但也许我错了
  • 如果您只想显示它们,JLabel 很好,您也可以使用setIcon 更改显示的图像,所有这些都是自动的

标签: java swing jlabel paintcomponent


【解决方案1】:

final BufferedImage image = ImageIO.read(new File("C:\image.png"));

您是否想绘制到 JPanel/JFrame 感到困惑?

https://docs.oracle.com/javase/tutorial/2d/images/

final BufferedImage image = ImageIO.read(new File("C:\image.png"));
GamePanel gamePanel;

 JPanel pane = new JPanel() {
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(image, 0, 0, null);
        }
    };


    gamePanel(or screen).add(pane);
}

【讨论】:

  • 我正在尝试绘制到 JLabel 和 drawRect 作品和 drawImage 做不到,我不知道为什么
  • JLabel label= new JLabel() { and gamePanel(or screen).add(pane); ??
  • 如果这是您的问题,我将 Screen(Label) 添加到 JPanel,然后将 JPanel 添加到 JFrame
  • @0x2B 或使用g.drawImage(image, 0, 0, this);
  • @0x2B 我也更喜欢ImageIO ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
相关资源
最近更新 更多