Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java增量错误()代码_Java_Graphics_Jpanel_Mouselistener - Fatal编程技术网

Java增量错误()代码

Java增量错误()代码,java,graphics,jpanel,mouselistener,Java,Graphics,Jpanel,Mouselistener,我在每次点击增加一次时遇到问题 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++; // increme

我在每次点击增加一次时遇到问题

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

    }
}

至少有问题,

  • 您已重写
    paint
    ,但未调用
    super.paint
  • 每次调用
    paint
    时,您都将添加一个鼠标侦听器<代码>绘制由绘制子系统在决定需要重新绘制UI时调用,这意味着UI中的每个元素都会更新,您正在向组件添加另一个鼠标侦听器
  • 相反,添加鼠标侦听器一次,可能是在构造函数中。您应该从
    paintComponent
    进行扩展,而不是扩展
    paintComponent
    ,并确保您正在调用
    super.paintComponent

    public void paint(Graphics g){
        addMouseListener(this);
        g.drawLine(5, 5, 200, 200); // TEST draw
    
    }
    
    在您的代码中,您正在
    paint(Graphics g)
    函数中添加侦听器!! 两件事:

  • 重写
    paintComponent()
    而不是
    paint()
    ,并且不要忘记调用
    super.paintComponent(g)
    方法
  • 将事件监听器添加到构造函数中或创建它的块中的组件 您的代码
    drawSpline\u-frame()
    不完整,但
    JFrame的内容窗格的布局默认为
    BorderLayout()
    。您只需执行以下操作:

    jFrame.getContentPane().add(windowPan, BorderLayout.Center);
    
    最后建议使用
    MouseAdapter
    添加
    MouseListener
    事件,您无需扩展它:

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

    你没有描述问题你忽略了你原来问题的答案,没有回答它们,你在重复同样的问题。这是不好的行为。投票以重复方式关闭。我正在尝试在类窗口中实现2个MouseListener。因为,我认为1.5,Frame#添加要添加的委托,所以您不需要使用getContentPane。BorderLayout的默认位置是居中,这意味着,您可以调用add(windowPan)…@MadProgrammer:也许我是个老古董,但我仍然喜欢使用
    getContentPane()
    ,因为它提醒我实际添加组件的位置。在尝试更改contentPane的属性(如背景)时,这一点更为重要。是的,但我认为这有助于我在添加多个面板时理解方向。只是习惯性的。无论如何,谢谢你提到:)@气垫船,谢谢你的更正。当然,我想对前几天说声对不起。@HovercraftFullOfEels我只是很懒,所以如果你不必键入它;)