【问题标题】:How to display an image in an JFrame? [closed]如何在 JFrame 中显示图像? [关闭]
【发布时间】:2020-11-22 09:31:08
【问题描述】:

我是一个初学者,正在尝试编写一个小游戏。不幸的是,我目前无法在 JFrame 上插入图像文件。

我从网上得到这个版本,但不幸的是,我运行它时什么都没有显示。

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

public class Draw extends JLabel {

    protected void paintComponent(Graphics g) {

        super.paintComponent(g);
        Graphics2D Graphic1 = (Graphics2D) g;

        Graphic1.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        g.setColor(new Color(0, 191, 255)); // farbe hintergrund einstellen
        g.fillRect(0, 0, Var.Framebreite, Var.Framehöhe);

        g.setColor(Color.yellow);

        Font currentFont = g.getFont(); // schriftgröße von Leben bestimmen
        Font newFont = currentFont.deriveFont(currentFont.getSize() * 8F);
        g.setFont(newFont);

        double b = Math.round(0.125 * Var.Framebreite);
        int h = (int) b;

        g.drawString("" + Var.LebenSpieler1, Var.Framebreite / 2 - h - 100, 90); // Leben anzeige spieler
                                                                                    // !muss "" + variable geschriebeen
                                                                                    // werden

        g.drawString("" + Var.LebenSpieler2, Var.Framebreite / 2 + h, 90); // Lebven anzeigen gegnerspieler

        ImageIcon icon = new ImageIcon("C:\\Users\\justi\\OneDrive\\Desktop\\OnlineSchule\\Englisch\\Test.PNG");
        JLabel l1 = new JLabel(icon);
        JPanel feld = new JPanel();
        feld.add(l1);
        feld.setBounds(30, 30, 110, 110);

        repaint();

    }
}

【问题讨论】:

  • 什么你在跑吗?您发布的代码中没有 main 方法。
  • 我会摆脱那个例子,因为它不是很好,而且会做很多不应该做的事情
  • 您的问题非常广泛,需要大量“附加”上下文。您要做的第一件事是弄清楚如何加载图像 - Reading/Loading an Image。这变得有点复杂,因为您可以从许多不同的来源加载图像。
  • 在 Swing 中有多种显示图像的方式,但是如果您想更好地控制图像的显示方式,那么您应该花一些时间来更好地了解在 Swing 中绘画是如何工作的
  • “从互联网上得到了这个版本” 把它放回你找到它的地方。然后将汽油倒在上面并点燃。这是可怕的代码,不应该被用来误导更多的人。

标签: java image swing jframe jpanel


【解决方案1】:
  1. 不要在绘画方法中创建组件。绘画方法用于对 Graphics 对象进行绘画。
  2. 不要在绘画方法中调用 repaint()。这将导致循环。如果您需要动画,请使用 Swing Timer。
  3. 不要在绘画方法中执行 I/O。该方法将被频繁调用,并且您希望绘制高效。

阅读 Custom Painting 上的 Swing 教程部分,了解如何进行绘画的示例。下载工作代码并根据您的要求进行修改。

要绘制图像,请使用 Graphics 对象的 drawImage(...) 方法。

您将在构造函数中读取图像并保留一个实例变量来引用图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多