2013-10-12 80 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