ImageIcon没有在面板上绘图

时间:2012-09-14 03:55:24

标签: java swing jpanel jlabel imageicon

我正在尝试通过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);
}

1 个答案:

答案 0 :(得分:3)

你的类中有一个paintComponent方法,它不会扩展JPanel,JComponent或任何类似的对象,因此它永远不会被调用,也没有用处。如果希望paintComponent按预期工作,则必须位于扩展JComponent或其子项之一(如JPanel)的类中。然后,您必须在GUI中使用该JPanel。请阅读Swing painting tutorials以了解如何正确执行此操作。

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

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