Mouseclicked Complication

时间:2013-06-04 21:45:53

标签: java swing click mouse

正如你在这里看到我正确定义了我的变量但是当我尝试运行一个方法lol一旦用户点击了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);
}
});

3 个答案:

答案 0 :(得分:1)

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

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

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

但它不会做你期望的。你无法在那里获得可用的Graphics。我知道如何获取Graphics对象的唯一方法是在paint/paintComponent中覆盖的JComponent方法之一。你可能不能做你打算在这里做的事情。如果您告诉我们您要做的事情,我们可以帮助您。

答案 1 :(得分:1)

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

myMethod(int foo);

而是:

myMethod(foo);

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

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

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

答案 2 :(得分: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);
            }
        }
    }

编辑:这仍然不是一个很好的解决方案,因为实际上有一种方法可以将图标绘制到面板中。这在 Hovercraft Full Of Eels

的答案中显示