背景:我正在制作一个多人游戏“野餐”或类似于“画东西”。
问题:当我徒手画时,它不断地调用repaint()。当我按下该按钮并单击jpanel时,该按钮将在jpanel上重新绘制或重新绘制。
代码:
public class DrawP extends JPanel implements MouseListener, MouseMotionListener{
private int x1;
private int y1;
private int cx,cy;
public DrawP(){
super();
JFrame fr = new JFrame("Test");
JButton btn = new JButton("Test");
fr.setSize(500, 500);
Container c = fr.getContentPane();
c.add(btn, BorderLayout.SOUTH);
c.add(this);
this.addMouseListener(this);
this.addMouseMotionListener(this);
fr.setVisible(true);
c.validate();
c.repaint();
}
public void paintComponent(Graphics g){
super.paintComponents(g);
g.drawLine(cx, cy, x1, y1);
}
@Override
public void mouseDragged(MouseEvent e) {
x1 = e.getX();
y1 = e.getY();
cx = x1;
cy = y1;
repaint();
}
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
cx = e.getX();
cy = e.getY();
x1 = cx;
y1 = cy;
repaint();
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
public static void main (String [] args){
DrawP d = new DrawP();
}
}这张图显示了单击按钮并绘制:http://imgur.com/o9QCTjF后发生的事情。
发布于 2013-12-20 15:54:35
super.paintComponent's'(g);看来你有个打字错误。您不需要paintComponent(.)中的"s“;
c.validate();
c.repaint();另外,您不需要以上两行。当您使框架可见时,框架将被重新验证和绘制。只有在从可见的GUI中添加/移除组件时,才会使用remove()和remove()方法。
编辑:
它只显示应用程序上的一个点。
如果您想要进行增量绘制,请查看定制绘画方法,例如两种常见的方法:
https://stackoverflow.com/questions/20706377
复制相似问题