我正在开发一个模仿 Paint 的程序。问题是当我绘制新形状时,以前的形状会被删除。我试图注释掉我对paintComponents的超级调用,它可以工作,但留下了太多的绘图。
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Canvas1 extends JPanel{
Circle c;
Rectangle r;
Line l;
String str;
int x1,x2,y1,y2;
Graphics g;
int draw;
int hollow=0;
Color cc;
public Canvas1(){
LineListener listener = new LineListener();
addMouseListener(listener);
addMouseMotionListener(listener);
setBackground (Color.white);
setPreferredSize (new Dimension(400, 400));
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(cc);
if (this.draw == 1)
{
c = new Circle (x1,y1,x2,y2);
if (hollow == 0)
{
c.hollow = false;
}
if (hollow == 1)
{
c.hollow = true;
}
c.draw(g);
}
if (this.draw ==2)
{
r = new Rectangle (x1,y1,x2,y2);
if (hollow == 0)
{
r.hollow = false;
}
if (hollow == 1)
{
r.hollow = true;
}
r.draw(g);
}
if (this.draw ==0)
{
l = new Line(x1,y1,x2,y2);
l.draw(g);
}
if (this.draw ==3)
{
g.drawString(str, x1, y1);
}
}
public void update(Graphics g) {
paint(g);
}
private class LineListener implements MouseListener, MouseMotionListener{
public void mousePressed(MouseEvent event){
x1 = event.getX();
y1 = event.getY();
if (draw ==3)
{
str = JOptionPane.showInputDialog("Enter String");
repaint();
}
}
public void mouseDragged(MouseEvent event){
if (draw ==1 || draw==2)
{
x2 = event.getX()-x1;
y2 = event.getY()-y1;
}
if (draw ==0)
{
x2 = event.getX();
y2 = event.getY();
}
repaint();
}
public void mouseClicked (MouseEvent event) {
}
public void mouseReleased (MouseEvent event) {
if (draw ==1 || draw==2)
{
x2 = event.getX()-x1;
y2 = event.getY()-y1;
}
if (draw ==0)
{
x2 = event.getX();
y2 = event.getY();
}
}
public void mouseEntered (MouseEvent event) {}
public void mouseExited (MouseEvent event) {}
public void mouseMoved (MouseEvent event) {}
}
}
正如您所发现的,您需要致电super.paintComponent(g)
,否则,JPanel
背景没有画,一切都一团糟。问题是在任何时候只能绘制一种形状draw
字段只能是单个值。一种解决方案是创建一个ArrayList
形状并绘制每个形状List
in paintComponent
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)