所以我试图在我的程序中实现一个鼠标监听器,我让mouseListener工作但不是图形。我每次在JPANEL上点击鼠标时都试图找到一种绘制蓝色圆圈的方法,唯一的问题是我似乎无法对图形进行良好的调用(我试图命名为g)。
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
class moveItMon extends JPanel implements MouseListener{
public moveItMon() {
this.setPreferredSize(new Dimension(500, 500));
addMouseListener(this);
}
public void addNotify() {
super.addNotify();
requestFocus();
}
public void mouseClicked(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e) {
movetehMon(e);
}
public void movetehMon(MouseEvent e){
int x = e.getX();
int y = e.getY();
System.out.println("(" + x + "," + y + ")");
paintMon(x,y);
}
public void paintMon( int x, int y){
Graphics g = new Graphics();
g.setColor(Color.WHITE);
g.clearRect(0,0,500,500);
g.setColor(Color.BLUE);
g.fillOval(x,y,20,20);
}
public static void main(String[] s) {
JFrame f = new JFrame("moveItMon");
f.getContentPane().add(new moveItMon());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
}
答案 0 :(得分:1)
Graphics g = new Graphics();
不会起作用(因为我确定你知道),因为这个类是抽象的。
Swing中的自定义绘制是通过覆盖从paintComponent
扩展的组件的JComponent
(如JPanel
)并使用提供的Graphics
上下文绘制来完成的。
请查看Performing Custom Painting和Painting in AWT and Swing了解详情
你还应该注意绘画是一个破坏性的过程,这意味着每次调用paintComponent
时,你都需要更新你需要绘制的所有东西。