-1

正如您在此处看到的,我正确定义了我的变量,但是当我尝试运行一个方法时,一旦用户单击了 Jlabel 标签,它就不允许我在 lol 方法的参数中输入 Graphics g?为什么这是帮助!

ImageIcon icon = new ImageIcon(hut);
    label.setIcon(icon);
    label.addMouseListener(new MouseAdapter()
{
@Override
public void mouseClicked(MouseEvent e){

    **lol(Graphics g);**
}

private void lol(Graphics g) {
    System.out.print('\u000C');
    storelook = new ImageIcon("/Users/alexspallone/Desktop/Programing/Pictures For Java/scroll.jpg").getImage();
    g.drawImage(storelook,0,0,null);
}
});
4

3 回答 3

1

您的代码无法编译。 Graphics g是说,“定义一个名为 g 的变量,它是一个 Graphics 对象”。您不能将其传递给lol同一行。以下是如何使您的代码编译

    @Override
    public void mouseClicked(MouseEvent m) {
        Graphics g = null;
        lol(g);
    }

    private void lol(Graphics g) {
        //...
    }

但它不会做你所期望的。你不能在Graphics那里得到一个可用的。我知道如何获取 Graphics 对象的唯一paint/paintComponent方法是使用您在JComponent. 您可能无法在这里做您打算做的事情。如果您让我们知道您想要做什么,我们可以为您提供帮助。

于 2013-06-04T21:47:18.770 回答
1

您需要阅读有关如何调用方法的教程,因为您的方法调用中没有类型名称:

不是:

myMethod(int foo);

反而:

myMethod(foo);

创建方法时,您只有参数列表中的类型:

public void myMethod(int foo) {
   // .....
}

为了解决您的问题,我建议您改为使用 ImageIcons 来保存您的图像,然后在您的 mousePressed 方法中,调用setIcon(myIcon)将显示您的图像的 JLabel。

于 2013-06-04T21:52:56.857 回答
0

您的代码仍然无法执行,因为您没有可用的图形对象。我建议您将代码更改为以下内容:

public void mouseClicked(MouseEvent e){

    lol=true;
    label.repaint();

}

    public class Label extends JLabel {
        storelook = new ImageIcon("/Users/alexspallone/Desktop/Programing/Pictures For Java/scroll.jpg").getImage();
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            if(lol)
            {

            g.drawImage(storelook,0,0,null);
            }
        }
    }

编辑:这仍然不是一个很好的解决方案,因为实际上有一种方法可以将图标绘制到面板中。这显示在充满鳗鱼的气垫船的答案中

于 2013-06-04T22:12:12.490 回答