gpt4 book ai didi

java - java中图形不绘制图像

转载 作者:行者123 更新时间:2023-12-01 18:03:26 24 4
gpt4 key购买 nike

我有一个应该绘制图像的类。

package ro.adlabs.imnuriAZSMR.UIClases;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;

import java.io.IOException;

public class JImage extends JPanel {
private BufferedImage image;
private int height;
private int width;

public JImage(String imagePath,int height,int width) {
try {
image = ImageIO.read(getClass().getResourceAsStream(imagePath));
} catch (IOException ex) {
ex.printStackTrace();
}
this.width = width;
this.height = height;
}
public JImage(String imagePath,int size){
new JImage(imagePath,size,size);
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, width, height, this);
}
}

这个类显示了一个“关于”对话框:

package ro.adlabs.imnuriAZSMR.UIClases;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class AboutDialog extends JDialog {
public AboutDialog() {
setTitle("About");
setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
JLabel name = new JLabel("<html><div style='text-align: center;'>Aceasta aplicatie e dezvoltata sub Termenii si Conditiile ADLabs.</div></html>");
JLabel copyright = new JLabel("© ADLabs - www.adlabs.ro");
name.setAlignmentX(0.5f);
copyright.setAlignmentX(0.5f);
add(name);
add(new JImage("../ico/appicon_200x200.png",50));
add(copyright);
JButton close = new JButton("Close");
close.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
dispose();
}
});
close.setAlignmentX(0.5f);
add(close);
setModalityType(ModalityType.APPLICATION_MODAL);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setSize(300, 200);

}
}

我将应用程序 Logo 图像添加到对话框中。当我第一次创建 JImage 类时,它工作了,它绘制了图片。然后我添加了方法:

setSize(width+20,height+20);

到 JImage 类中的 Jpanel,当我再次运行该程序时,它没有绘制图像。然后我所做的任何事情都没有解决这个奇怪的错误。有人有什么想法吗?我做错了什么?

最佳答案

Graphics doesn't draw image in java

您正在使用BoxLayoutBoxLayout 在进行布局时将使用面板的首选尺寸信息。您的首选尺寸是 (0, 0),因此无需绘制任何内容。

当您进行自定义绘制以返回组件的大小时,您需要重写面板的 getPreferredSize() 方法,以便布局管理器可以完成其工作。

但是,正如已经提到的,无需创建自定义类,因为您只需使用 JLabel 即可显示图像。进行自定义绘画的唯一时间是在绘画时需要以某种方式修改图像时。

关于java - java中图形不绘制图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38875745/

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