import java.awt.*;
import java.awt.image.*;
import javax.swing.*;
import java.awt.event.*;
public class MouseAct extends JFrame{
public static void main(String args[]){
MouseAct M= new MouseAct();
M.paint1();
}
public void paint1(){
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
setSize(640,480); //
show();
}
public void paint( Graphics g ){
super.paint(g);
Graphics2D g2=(Graphics2D)g;
g.setColor(Color.black);
g.fillRect(1,1,638,478);
g.setColor(Color.white);
g.drawRect(1,1,638,478);
g.drawRect(100,100,100,100);
MouseListener l = new MouseAdapter() {
public void mousePressed(MouseEvent e) {
MouseAct b = (MouseAct)e.getSource();
System.out.println("source="+e.getSource());
// b.setSelected(true);
b.repaint();
}
public void mouseReleased(MouseEvent e) {
MouseAct b = (MouseAct)e.getSource();
// b.setSelected(false);
b.repaint();
}
};
}
// public void setSelected(){
}
答案 0 :(得分:1)
(1)不要在paint方法中创建Mouselistener - 现在你在每次重绘时都创建一个新的。内部paint1()
将是一个更好的地方
(2)将侦听器添加到MouseAct对象。然后只要按下鼠标按钮而指针位于框架“上方”,就会调用它。
public void paint1(){
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
setSize(640,480);
MouseListener l = new MouseAdapter() { ... } // add your code here
addMouseListener(l); // this 'activates' the listener
show();
}
答案 1 :(得分:1)
您不应该覆盖JFrame或任何Swing组件的paint()方法。
自定义绘制是通过覆盖JComponent的paintComponent()方法完成的,然后将该组件添加到框架的内容窗格中。然后可以将MouseListener添加到此组件中。
阅读Custom Painting上Swing教程中的部分以获取更多信息。本教程还有一节“如何编写鼠标监听器”。