java - 我无法使用 Swing 弹出图像

标签 java image swing

我已经用谷歌搜索了这个并搜索了这个网站,尝试使用 Swing 来显示图像,但是每次我实现在网上找到的代码时它都不起作用。我不知道我做错了什么,有人可以帮助我吗?

package Game;

import java.awt.Dimension;
import java.awt.Graphics;
import java.io.IOException;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Amazing {

    private int width = 300;
    private int height = width / 16 * 9;
    private int scale = 3;
    private static Graphics g;

    private static JFrame frame = new JFrame();
    private static JPanel panel = new JPanel();

    public Amazing(){
        Dimension size = new Dimension(width*scale, height*scale);
        frame.setPreferredSize(size);
        frame.setResizable(false);
        frame.setTitle("Amazing!");
        frame.add(panel);
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

    public static void main(String[] args){
        Amazing amazing = new Amazing();
        Character character = new Character();
        character.paintComponent(g);
    }


}
<小时/>
package Game;

import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class Character extends JPanel{

    private BufferedImage image;

    public Character(){

       try {                
            image = ImageIO.read(new File("E:\\Libraries\\Documents\\Java Stuff\\workspace\\Java_Final\\narwhal.png"));
       } catch (IOException ex) {
            // handle exception...
       }
    }

    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 50, 50, null); // see javadoc for more info on the parameters            
    }

}

最佳答案

Amazing amazing = new Amazing();

这行代码所做的就是创建一个框架,然后向其中添加一个空面板。由于面板是空的,所以没有什么可绘制的。

Character character = new Character();
character.paintComponent(g);

您永远不应该直接调用paintComponent()方法。当组件需要重新绘制时,Swing 将调用该方法。不管怎样,创建一个Character对象什么也不做。那个物体只是存在于内存中。它没有添加到 GUI,因此永远无法绘制。

我建议您忘记自定义绘画,只使用 JLabel 来显示图像。阅读 Swing 教程中关于 How to Use Labels 的部分一个工作示例。不仅如此,本教程还将向您展示如何更好地构建代码。您不应该使用静态变量。从工作示例开始,然后对其进行自定义以使用您的图像。

关于java - 我无法使用 Swing 弹出图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20587894/

相关文章:

java - JaxB 编码通配符泛型扩展类

链接旁边的 CSS 图像 - 更具体?

java - JTree 单元渲染器问题

Java - 我们如何获取选定或 Activity 框架(getSelected Frame())并将其传递给 JDialog()?

java - 为什么我不能在参数中使用小于 0 的数字来参数化 double java?

java - GWT CellTable 所有可排序列上的排序 arow 图标

Java FX 应用程序在 LINUX 中意外关闭

PHP:使用 ImagePng 创建图像并在单个文件中使用 base64_encode 进行转换?

html - 如何将图像放置在偶数位置

java - Java Swing 中框架、窗口和组件之间的通信