2014-01-03 2 views
-1

Я пытаюсь создать границу, когда пользователь наводит курсор на что-то, но когда я использую метод Paint. Это говорит; ожидаемый при использовании прослушивателя мыши

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); 
     } 
    } 
});    

Я просто не где еще я могу поставить полу-Colen. Я новичок в программировании графического интерфейса, поэтому надеюсь, что не ошибся. Благодаря!

ответ

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

5

Вы не можете вкладывать два метода в Java:

public void mouseEntered(MouseEvent arg0) { 
      public void paint(Graphics g) { //Method inside a method is not allowed 
2
  • вы не можете вызвать краску() из AWT/Swing Listener

  • это методы автоматически вызывается отменить этот метод для контейнера

  • переопределить краску Компонент для JPanel вместо краски()

+0

в моей точке 1, но вы получите мой ответ на свой ответ здесь – mKorbel

+0

Хотя ваш ответ дает некоторую полезную ясность, он не отвечает на вопрос, который спрашивает, почему он получает синтаксическую ошибку – StormeHawke

+0

, тогда вы также получаете мой верхний: D – nachokk

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); 
     } 
    }); 

Обратите внимание, что это не будет фактически работать функционально, но это показывает, почему вы получаете ошибку синтаксиса

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); 
    } 
}); 
0

вы не можете поместить метод в другой в Java сделать метод вытягивать слушатель то, что вы должны сделать, это просто вызвать метод рисования в методе слушателя:

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!! 
    } 
}); 
Смежные вопросы