我正在尝试通过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);
}
答案 0 :(得分:3)
你的类中有一个paintComponent方法,它不会扩展JPanel,JComponent或任何类似的对象,因此它永远不会被调用,也没有用处。如果希望paintComponent按预期工作,则必须位于扩展JComponent或其子项之一(如JPanel)的类中。然后,您必须在GUI中使用该JPanel。请阅读Swing painting tutorials以了解如何正确执行此操作。
修改强>
显示ImageIcon的另一种方法是简单地将其添加到JLabel,然后在Swing GUI中显示JLabel。
编辑2
此外,即使您的类扩展了JPanel,它仍然无法工作,因为您的图标永远不会添加到任何内容中。我没有看到你正在做的图形 - 通过调用图标的paintIcon(...)
方法。我不能说这是错的;只是我还没有看到这样做过。