2012-09-14 93 views
1

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

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

不,组件的布局与您的问题无关。至于你的问题的原因,在这一点上,这是任何人的猜测。这可能是因为您将不透明组件添加到JPanel中,但是又一次,谁知道。如果你仍然需要我们的帮助,考虑给我们更多的信息,这样就不必猜测你在做什么。作为一般指南,问你的问题,就好像你是那个必须回答它并且不知道提问者代码的人。从我们的角度考虑事情。 –

+0

你的类'Frame'不是一个组件,所以'paintComponent()'不会被调用。 – tenorsax

+0

同意。你可以注释掉for循环并尝试运行你的代码。面板不透明可能会隐藏您的图像。如果一个背景是你所需要的,可能是[this](http://stackoverflow.com/questions/2545214/how-to-set-a-transparent-background-of-jpanel)线程将帮助 – javatarz

回答

3

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

编辑
另一种方式来显示一个ImageIcon是简单地把它添加到一个JLabel,然后在一个Swing GUI显示的JLabel。

编辑2
而且,即使你的类扩展的JPanel,它仍然是行不通的,因为你的图标是永远不会添加任何东西。我还没有看到图像完成,通过调用图标的paintIcon(...)方法。我不能说这是错的;只是我没有看到这样做。

+0

有没有其他方法来绘制图像图标呢?除了使类扩展JPanel? – Zyvo

+0

@user:请参阅编辑以回答。 –

+0

我想我知道了,但我仍然没有正确设置路径:/ Idk如果这看起来像Mac的正确路径? – Zyvo