2011-12-06 51 views
0

我不確定爲什麼我的代碼無法正常工作,但它讓我發瘋。爲什麼這段代碼不能畫出一條線?

這是我的課應該繪製按鈕和創建區借鑑:

第二組的代碼是我需要做4帆布的,當我使兩個鼠標點擊它繪製一個驅動程序如果我嘗試再次點擊畫布,然後重新繪製兩次點擊。

我收到以下錯誤: 錯誤:無效的方法聲明;需要返回類型 addMouseListener(this); ^ 錯誤:非法啓動類型 addMouseListener(this); ^

public class Scribble extends JPanel implements MouseListener 
{ 
addMouseListener(this); 
int x, x1, y, y1; 
boolean flag = false; 

protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 

    g.drawLine(x, y, x1, y1); 
} 


public void mouseReleased(MouseEvent e) 
{ 

    if (!flag){ 
     x = e.getX(); 
     y = e.getY(); 
     flag = true; 
    } 
    else{ 
     x1 = e.getX(); 
     y1 = e.getY(); 
     flag = false; 
     repaint(); 
} 
} 



public void mouseExited(MouseEvent e){} 
public void mouseClicked(MouseEvent e){} 
public void mousePressed(MouseEvent e){} 
public void mouseMoved(MouseEvent e){} 
public void mouseEntered(MouseEvent e){} 

} 



public class Lab8Draw extends JFrame{ 

public Lab8Draw(){ 
    Color c = new Color(100, 10, 200); 
    setTitle("Lab 8 - Application #1"); 
    setLayout(new GridLayout(2,2)); 
    Scribble s = new Scribble(); 
    s.setBackground(Color.WHITE); 
    add(s); 
    Scribble s1 = new Scribble(); 
    s1.setBackground(Color.RED); 
    add(s1); 
    Scribble s2 = new Scribble(); 
    s2.setBackground(c); 
    add(s2); 
    Scribble s3 = new Scribble(); 
    s.setBackground(Color.BLUE); 
    add(s3); 

} 


    public static void main (String[] args){ 


     Lab8Draw frame = new Lab8Draw(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(800, 800); 
     frame.setVisible(true); 
    } 
} 

回答

1

你將不得不實施MouseListener

public class Scribble extends JPanel implements MouseListener 

,並將其註冊

Scribble s = new Scribble(); 
s.addMouseListener(s); 

Java tutorials提供了有益的指導編寫一個MouseListener

或者,您可以定義一個內部類,該類擴展了MouseInputAdapter,因爲它已經有MouseListener方法的空實現。

+0

我得到這個錯誤,當我試圖通過實現MouseListener – Robert

+0

錯誤:塗鴉是不是抽象的, 公共類塗鴉擴展JPanel實現的MouseListener ^ – Robert

+0

您必須實現規定的所有方法不MouseListener的覆蓋抽象方法的mouseEntered(MouseEvent)方法在_MouseListener_界面上。通過IDE(源代碼 - >覆蓋/在Eclipse中實現)執行此操作通常是最簡單的。如果這些是空的實現(沒有實際做任何事情),那很好,但是你必須定義它們! –

1

第一步是讓你的Scribble類擴展JPanel。您還需要使您的畫布調用addMouseListener方法。現在,你真正擁有的是4張JFrame上的畫布。您不要將MouseListener添加到該類中的面板。您將偵聽器添加到Scribble類的實例。另外,在驅動程序類的內部實現MouseListener 。你不應該在JPanel類中做。

+0

如果你得到一個錯誤,那麼就像其他人一樣,讓這個方法變成空的。 MouseListener有5個方法,而不是4 –

+0

我不太明白你在驅動類裏面實現MouseListener的意思。我目前正在塗鴉上實施它。你是什​​麼意思? – Robert

+0

我現在知道了我需要將addMouseListener添加到構造函數中,並且在它之外擁有它感謝您的幫助 – Robert

0

首先,類Scribble必須實現MouseListener並通過addMouseListener()方法分配事件處理程序以捕獲鼠標事件。 MouseListener接口具有以下必須重寫的方法。

class Scribble extends JPanel implements MouseListener 
{ 
    int x, x1, y, y1; 
    boolean flag = false; 
    public Scribble(){ 
    addMouseListener(this); 
    } 
    protected void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.drawLine(x, y, x1, y1); 
    } 
    public void mouseReleased(MouseEvent e){ 
    if (!flag){ 
     x = e.getX(); 
     y = e.getY(); 
     flag = true; 
    } 
    else{ 
     x1 = e.getX(); 
     y1 = e.getY(); 
     flag = false; 
     repaint(); 
    } 
    } 
public void mouseExited(MouseEvent e){} 
public void mouseClicked(MouseEvent e){} 
public void mousePressed(MouseEvent e){} 
public void mouseMoved(MouseEvent e) {} 
public void mouseEntered(MouseEvent e) {} 
} 
+0

當我嘗試實現MouseListener時,出現錯誤:Scribble不是抽象的,也不重寫抽象方法mouseEntered(MouseEvent)在MouseListener中 公共類Scribble擴展JPanel實現MouseListener – Robert

+0

錯誤:無效的方法聲明;需要返回類型 \t addMouseListener(this); \t^ 錯誤:非法啓動類型 \t addMouseListener(this); – Robert

+0

@ user512915 - 可能是你錯過了一些東西。看到我編輯的帖子。 – adatapost

0

您是否將自己添加爲MouseListener?例如。

this.addMouseListener(this);

+0

錯誤:非法啓動類型 \t this.addMouseListener(this); \t^ ';'預計 \t this.addMouseListener(this); \t^ 錯誤:無效的方法聲明;返回類型要求 \t this.addMouseListener(this); \t^ 錯誤:非法啓動類型 \t this.addMouseListener(this); – Robert

0

我認爲這是因爲當在JFrame上繪製JPanels「Scribble」時,座標都是0,因爲它們沒有初始化。所以你有一條從P(0/0)到P(0/0)的線。

檢查您的MouseListener是否正在運行....您在哪註冊它?你不需要實現MouseListener嗎?祝你好運。