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またはその子の1つ(JPanelなど)を拡張するクラスに含まれている必要があります。次に、GUIでそのJPanelを使用する必要があります。これを正しく行う方法については、 Swingペインティングのチュートリアルをお読みください。

編集
ImageIconを表示する別の方法は、単にそれをJLabelに追加してから、SwingGUIでJLabelを表示することです。

編集2
また、クラスがJPanelを拡張した場合でも、アイコンが何にも追加されないため、JPanelは機能しません。paintIcon(...)アイコンのメソッドを呼び出すことによって、グラフィックが実行されているのを見たことがありません。それが間違っているとは言えません。私がこのように行われるのを見たことがないというだけです。

于 2012-09-14T04:20:37.120 に答える