1

我正在尝试通过paintComponent将ImageIcon添加到面板,但它不起作用。我尝试将其添加到的面板设置为 GridLayout。这可能是为什么?还是被画了?或者我的路径可能设置不正确......我从来没有

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Frame implements MouseListener, KeyListener {

JFrame f = new JFrame();
JPanel p = new JPanel();

JPanel[][] panel = new JPanel[10][10];

int k = 1;
Color previous;

ImageIcon icon = new ImageIcon("/Users/Admin/Desktop/stickFigure.jpg");

static String title = "Grid World";

public Frame(String s) {
    f.setTitle(s);
    p.setLayout(new GridLayout(10, 10));
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            panel[i][j] = new JPanel();
            p.add(panel[i][j], i, j);
            panel[i][j].addMouseListener(this);
            panel[i][j].setBackground(Color.WHITE);
        }
    }
    p.setSize(500, 500);
    f.add(p);
    f.setSize(490, 492);
    f.setVisible(true);
    f.setResizable(false);
    f.setDefaultCloseOperation(3);
    f.addKeyListener(this);
    f.setLocationRelativeTo(null);
}

public void paintComponent(Graphics g) {
    icon.paintIcon(f, g, 100, 100);
}
4

1 回答 1

3

您在一个不扩展 JPanel、JComponent 或任何类似对象的类中有一个 paintComponent 方法,因此它永远不会被调用并且没有任何用途。如果您希望paintComponent 按预期工作,它必须位于扩展JComponent 或其子类之一的类中,例如JPanel。然后你必须在你的 GUI 中使用那个 JPanel。请阅读Swing 绘画教程以了解如何正确执行此操作。

编辑
显示 ImageIcon 的另一种方法是简单地将其添加到 JLabel,然后在 Swing GUI 中显示 JLabel。

编辑 2
此外,即使您的类扩展了 JPanel,它仍然无法工作,因为您的图标从未添加到任何内容中。我还没有看到你正在做的图形——通过调用图标的paintIcon(...)方法。我不能说这是错的;只是我还没有看到这样做。

于 2012-09-14T04:20:37.120 回答