簡體   English   中英

; 使用鼠標偵聽器時預期

[英]; expected when using a Mouse Listener

當用戶將鼠標懸停在某物上時,但在使用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);
        }
    }
});              

我只是沒有別的地方可以放半分。 我是GUI編程的新手,所以希望我不要犯一個錯誤。 謝謝!

您不能在Java中嵌套兩個方法:

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

您有語法問題。

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 閱讀更多AWT和Swing中的繪畫

  • 您不能從AWT / Swing Listener調用paint()

  • 覆蓋此方法會自動調用此方法

  • 為JPanel覆蓋paintComponent而不是paint()

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

請注意,這實際上在功能上不起作用,但是它說明了為什么出現語法錯誤

您不能將paint方法嵌套在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);
  }
});

您不能在Java中將一個方法放到另一個方法中,使draw方法成為偵聽器,您應該做的只是在listener方法中調用draw方法:

這個

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM