鼠标单击时不画线

z8dt9xmd  于 2021-07-13  发布在  Java
关注(0)|答案(3)|浏览(487)

我有以下java程序:

import java.awt.*;
  import java.awt.Graphics;
  import javax.swing.*;
  import java.awt.event.*;
  import java.io.*; 
  import javax.swing.*;

  public class Lapex extends JPanel implements MouseListener{
JPanel p = new JPanel();

Lapex(){
    JFrame f = new JFrame();
    p.addMouseListener(this);
    p.setPreferredSize(new Dimension(600, 600));
    f.add(p);
    f.pack();
    f.show(true);
}

public void paint(Graphics g){
     paintComponents(g);
     g.setColor(Color.RED);
     g.drawLine(10, 10, 100, 100);
}

public void mouseClicked(MouseEvent me){
     System.out.println("AAAA");
     repaint();
}

}

public static void main(String[] args){
    new Lapex();

}
}

点击鼠标,在控制台显示为“aaaaaaa”,但没有画线。(我删除了另一个鼠标事件)如何修改?

xmakbtuz

xmakbtuz1#

必须调用super方法并使用paintcomponent。

public void paintComponent(Graphics g){
     super.paintComponent(g);
     g.setColor(Color.RED);
     g.drawLine(10, 10, 100, 100);
}
3gtaxfhh

3gtaxfhh2#

需要注意的几点:
你的班级扩大了 JPanel ,但是你又创造了另一个 JPanel 在实际添加到框架的类中。改为添加类的示例。
替代paintcomponent而不是paint。
使用调用invokelater在edt上启动程序。有关详细信息,请参阅事件调度线程。
重写getpreferredsize而不是调用setpreferredsize。
以下是单击鼠标按钮时打开/关闭行的完整示例:

import java.awt.*;
import java.awt.Graphics;
import javax.swing.*;
import java.awt.event.*;

public class Lapex extends JPanel {

  boolean drawLine = false;

  Lapex(){
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

    this.addMouseListener(new MouseAdapter() {
      public void mouseClicked(MouseEvent me){
        drawLine = !drawLine;
        repaint();
      }
    });

    f.add(this);
    f.pack();
    f.setVisible(true);
  }

  @Override
  protected void paintComponent(Graphics g){
    super.paintComponent(g);
    if(drawLine) {
      g.setColor(Color.RED);
      g.drawLine(10, 10, 100, 100);
    }
  }

  @Override
  public Dimension getPreferredSize() {
    return new Dimension(600, 600);
  }

  public static void main(String[] args) {
    SwingUtilities.invokeLater(new Runnable() {
      @Override
      public void run()
      {
        new Lapex();
      }});
  }
}
hgqdbh6s

hgqdbh6s3#

不!,不重写 paint() 让它自己摆动。你要做的就是重写 paintComponent() .

相关问题