2013-10-12 104 views
-3

我有問題每增加一個點擊一次。Java增量錯誤()代碼

class window extends JPanel implements MouseListener{ 

int a=0; 

public void paint(Graphics g){ 
    super.paint(); 
    g.drawLine(5, 5, 200, 200); // TEST draw 

} 

@Override 
public void mousePressed(MouseEvent e) { 
    a++; // increment by one 
    System.out.println(a);// print out 
} 

@Override 
public void mouseReleased(MouseEvent e) { 
    // TODO Auto-generated method stub 

} 

} 


class drawSpline_frame extends JFrame { 
public drawSpline_frame(){ 
    setSize(500,500); 
    setTitle("Spline"); 

    Container cp = this.getContentPane(); // EDITED 
    cp.add(window, BorderLayout.CENTER); 
      window.addMouseListener(window); 
} 

} 

class drawSpline{ 
public static void main(String[] args) { 
    JFrame frame = new drawSpline_frame(); 
    frame.setVisible(true); 

    } 
} 
+1

你有沒有那樣的問題 –

+0

你忽略的答案通過不回覆他們來回答您的原始問題,並且您在這裏複製相同的問題。這不是好行爲。投票結束重複。 –

+0

我想在類Window中實現2個mouseListeners。 – th3shad0w

回答

1

至少有問題,

  1. 你覆蓋paint,而不是所謂的super.paint
  2. 你每次paint被稱爲添加鼠標監聽。 paint由paint子系統調用,當它決定UI需要重新繪製時,這意味着每個UI都會更新,您將向該組件添加另一個鼠標偵聽器。

相反,可能會在構造函數中添加一次鼠標偵聽器。不是擴展paint的,你應該從paintComponent延伸,並確保您所呼叫super.paintComponent

1
public void paint(Graphics g){ 
    addMouseListener(this); 
    g.drawLine(5, 5, 200, 200); // TEST draw 

} 

在你的代碼在paint(Graphics g)功能附加監聽器! 兩件事情:

  1. 覆蓋paintComponent()代替paint(),不要忘記調用super.paintComponent(g)方法。
  2. 將事件偵聽器添加到組件中,無論是在構造函數中還是在創建它的塊中。

您的代碼drawSpline_frame()是不完整的,但content pane's佈局JFrame是默認BorderLayout()。你可以這樣做:

jFrame.getContentPane().add(windowPan, BorderLayout.Center); 

作爲最後一個建議添加使用MouseAdapterMouseListener事件,你不需要把它擴大:

jPanel1.addMouseListener(new MouseAdapter() { 
    public void mouseClicked(MouseEvent evt) { 
     jPanel1MouseClicked(evt); 
    } 
    }); 
+0

因爲,我認爲1.5,幀#添加代表添加,所以你不需要使用getContentPane。 BorderLayout的默認位置是CENTER,也就是說,你可以直接調用add(windowPan)... – MadProgrammer

+0

@MadProgrammer:也許我是個老傻瓜,但我仍然喜歡用'getContentPane()',因爲它提醒我我在哪裏實際上是添加組件。當嘗試更改contentPane的屬性(如背景)時,這顯得尤爲重要。 1+這個和你的答案。 –

+0

是的,但我認爲這有助於我在添加多個面板時瞭解方向。只是習慣性的。無論如何,感謝提起:) – Sage