gpt4 book ai didi

java - 如何将PNG图像绘制到JPanel上?

转载 作者:行者123 更新时间:2023-11-29 05:27:30 25 4
gpt4 key购买 nike

我试图通过覆盖 paintComponent 方法将图像绘制到 JPanel 上。但是,我一点运气都没有,我也不知道为什么。

这是我目前得到的代码:

绘图面板

public class DrawPanel extends JPanel{

private Image backgroundImg;

public DrawPanel()
{
backgroundImg = Toolkit.getDefaultToolkit().createImage("C:\\Users\\Administrator\\workspace\\Scrub\\src\\loginBackground.png");
}

@Override
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawImage(backgroundImg, 0, 0, null);
}
}

LoginWindow 类

import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class LoginWindow extends Window{

private DrawPanel panel;

public LoginWindow(int width, int height)
{
super("", width, height);


panel = new DrawPanel();
this.add(panel);

panel.setVisible(true);
}
}

主要

public class Main
{
public static void main(String[] args)
{
LoginWindow loginWindow = new LoginWindow(500, 300);


}
}

最佳答案

有很多原因这可能行不通

  • 图像可能没有加载。您应该改用 ImageIO.read,因为如果出现问题,它将抛出 IOException
  • 布局管理器正在使用面板的首选大小,默认为 0x0,使组件实际上不可见
  • 您没有将窗口设置为可见...

例如

public class DrawPanel extends JPanel{
//...
public Dimension getPreferredSize() {
return backgroundImg == null ? new Dimesion(100, 100) : new Dimension(backgroundImg.getWidth(this), backgroundImg.gtHeight(this));
}

然后在您的 Window 类中...

public LoginWindow(int width, int height)
{
super("", width, height);


panel = new DrawPanel();
this.add(panel);

// Swing components are visible by default
//panel.setVisible(true);
// windows aren't
setVisible(true);
}

一个更简单的孤子是使用 JLabel...

setLayout(new BorderLayout());
BufferedImage img = ImageIO.read(new File(...));
JLabel label = new JLabel(new ImageIcon(img));
add(label);
setVisible(true);

看看How to use LabelsReading/Loading an Image了解更多详情

关于java - 如何将PNG图像绘制到JPanel上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22208236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com