;使用鼠标侦听器时需要

时间:2014-01-03 15:32:17

标签: java swing graphics jlabel mouselistener

当用户将鼠标悬停在某物上时,我试图让边框出现,但是当我使用绘画方法时。它说

Syntax Error on Token "(" ; expected and 
Syntax Error on Token ")" ; expected

我的代码是:

JLabel lblAllOrNothing = new JLabel("All Or Nothing (4 BP)");
lblAllOrNothing.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseEntered(MouseEvent arg0) {
        public void paint(Graphics g) { //Error is this line
            g.drawRect(0, 72, 256, 72);
        }
    }
});              

我只是没有其他地方我可以放半昏迷。我是GUI编程的新手,所以我希望我没有犯错误。谢谢!

7 个答案:

答案 0 :(得分:5)

你不能在java中嵌套两个方法:

public void mouseEntered(MouseEvent arg0) {
            public void paint(Graphics g) { //Method inside a method is not allowed

答案 1 :(得分:2)

您遇到语法问题。

JLabel lblAllOrNothing = new JLabel("All Or Nothing (4 BP)");
lblAllOrNothing.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseEntered(MouseEvent arg0) {
        // You can't define a method inside a method!!
    }
});

顺便在Swing中进行自定义绘画,您应该覆盖paintComponent而不是paint。阅读更多Painting in AWT and Swing

答案 2 :(得分:2)

  • 你不能从AWT / Swing Listener调用paint()

  • 通过覆盖Container

  • 的此方法自动调用此方法
  • 覆盖JPanel的paintComponent而不是paint()

答案 3 :(得分:0)

你不能在Java中的方法中使用方法。

相反,这样做

JLabel lblAllOrNothing = new JLabel("All Or Nothing (4 BP)");
    lblAllOrNothing.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseEntered(MouseEvent arg0) {
            //call the paint method here
        }

        //Move this method here
        public void paint(Graphics g) { //Error is this line
            g.drawRect(0, 72, 256, 72);
        }
    });

请注意,这实际上不会在功能上有效,但它说明了为什么会出现语法错误

答案 4 :(得分:0)

您无法在mouseEntered方法中嵌套绘制方法;也许你只想要

JLabel lblAllOrNothing = new JLabel("All Or Nothing (4 BP)");
lblAllOrNothing.addMouseListener(new java.awt.event.MouseAdapter() {
  @Override
  public void mouseEntered(MouseEvent e) {
    // public void paint(Graphics g) { 
    // g.drawRect(0, 72, 256, 72); }
    java.awt.Component c = e.getComponent();
    c.getGraphics().drawRect(0, 72, 256, 72);
  }
});

答案 5 :(得分:0)

你不能把一个方法放到java中的另一个方法中,将draw方法输出到监听器 你应该做的只是在监听器方法中调用draw方法:

答案 6 :(得分:0)

new MouseAdapter() {
    @Override
    public void mouseEntered(MouseEvent arg0) {
        // You can't define a method inside a method!!
    }
};

是一个匿名类。 现在当你将它用作语句时,它将被用作};,并返回一个对象,而当你使用它作为参数传递对象时,它将使用它作为

fun(new MouseAdapter() {
    @Override
    public void mouseEntered(MouseEvent arg0) {
        // You can't define a method inside a method!!
    }
});