gpt4 book ai didi

java - 为什么这个小程序不工作/显示图像?

转载 作者:行者123 更新时间:2023-11-29 03:56:16 25 4
gpt4 key购买 nike

我是小程序的新手,正在尝试熟悉一些基础知识 - 例如如何在一个小程序中显示 jpg 图像。我已经阅读了我认为是关于 Applets 的 Java 教程的相关部分,但我不明白为什么这不起作用,我得到的只是一个空白的 applet 区域。 “/cards/as.jpg”——该文件存在于小程序运行目录的子目录中。谁能看到我做错了什么?我很茫然。

import javax.swing.JApplet;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TestApplet extends JApplet {
public void init() {
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
createGUI();
}
});
}
catch (Exception e) {
System.err.println("createGUI didn't complete successfully");
}
}

private void createGUI() {
JPanel newContentPane = new JPanel();

ImageComponent card = new ImageComponent();
card.setImage(getCodeBase() + "/cards/as.jpg");

newContentPane.add(card);

newContentPane.setOpaque(true);
setContentPane(newContentPane);
}
}


import java.awt.*;
import javax.swing.JComponent;
import javax.imageio.*;
import java.net.*;
import java.io.*;

/**
A component that draws an Image.
*/
public class ImageComponent extends JComponent {
private Image image;
private String url;

public ImageComponent() {
image = null;
url = null;
}

public void setImage(String urlCardName) {
url = urlCardName;
if (url != null) {
try {
image = ImageIO.read(new URL(url));
}
catch (IOException e)
{
e.printStackTrace();
}
}
else {
image = null;
}
this.repaint();
}

public void paintComponent(Graphics g) {
if (image == null) return;
// draw the images in the upper-left corner of the component
g.drawImage(image, 0, 0, null);
}
}

最佳答案

我认为这是您的布局。通常情况下,contentPane 默认使用 BorderLayout,但是当您使用自己的 JPanel 作为 contentPane 时,您使用的是 JPanel 默认布局,即 FlowLayout,使用 FlowLayout 添加到容器的组件不会像使用 FlowLayout 那样扩展以填充容器边框布局。检查渲染时您的 ImageComponent 有多大——我敢打赌它非常小,甚至为 0。

一个解决方案是使用小程序中已经存在的 contentPane 及其默认的 BorderLayout,否则如果您必须使用自己的 JPanel,请为其提供 BorderLayout 并添加新的 ImageComponent BorderLayout.CENTER。例如:

    JPanel newContentPane = new JPanel();

newContentPane.setLayout(new BorderLayout()); // *** added this

ImageComponent card = new ImageComponent();
card.setImage(getCodeBase() + "/cards/as.jpg");

newContentPane.add(card, BorderLayout.CENTER); // *** changed

关于java - 为什么这个小程序不工作/显示图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6246722/

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