自做拉个画板程序(1)基本可以画圆,矩形,直线但有个问题想改善希望大哥门帮我看看,请进有源程序,问题描述里面。。

jy00057800 2004-12-22 10:52:17
每次画拉一个图形比如直线,再画第2个时先画的就没拉 应该重写update()吗?
请大哥门帮我看看

程序结构:
一个自定义画布类Canva
一个主类 PhotoShop
3个选者所画图形的按钮类 Cril,Rect,Line

import java.awt.*;
import java.awt.event.*;
public class PhotoShop extends Frame
{

int x,y; int xf,yf;
Cril cril;Rect rect;Line line;
boolean l=false,cr=false,r=false,cl=false,f=false,co=false;
Canva canvas=new Canva(this);
Dialog dialog=new Dialog(this,"工具条",false);
public PhotoShop()
{


cril=new Cril("圆",this);
rect=new Rect("矩形",this);
line=new Line("直线",this);

dialog.setSize(100,100);
dialog.setLayout(new GridLayout(3,1));
dialog.add(cril);
dialog.add(line);
dialog.add(rect);
dialog.setVisible(true);

this.add(canvas,BorderLayout.CENTER);

addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
}



public static void main(String args[])
{
System.out.println("Starting PhotoShop...");
PhotoShop mainFrame = new PhotoShop();
mainFrame.setSize(400, 400);
mainFrame.setTitle("PhotoShop");
mainFrame.setVisible(true);
}
}

class Cril extends Button implements ActionListener
{
PhotoShop photoShop;
int x,y;
Cril(String s,PhotoShop photoShop)
{
super(s);
this.setSize(30,15);
this.photoShop=photoShop;
this.addActionListener(this);
}
public void actionPerformed(ActionEvent ae)
{
photoShop.f=false;
photoShop.co=false;
photoShop.cr=true;
photoShop.l=false;
photoShop.r=false;
photoShop.cl=false;
photoShop.f=false;
}
}
class Rect extends Button implements ActionListener
{
PhotoShop photoShop;
int x,y;
Rect(String s,PhotoShop photoShop)
{
super(s);
this.setSize(30,15);
this.photoShop=photoShop;
this.addActionListener(this);
}
public void actionPerformed(ActionEvent ae)
{
photoShop.f=false;
photoShop.co=false;
photoShop.cr=false;
photoShop.l=false;
photoShop.r=true;
photoShop.cl=false;
photoShop.f=false;
}

}
class Line extends Button implements ActionListener
{
PhotoShop photoShop;
int x,y;
Line(String s,PhotoShop photoShop)
{
super(s);
this.setSize(30,15);
this.photoShop=photoShop;
this.addActionListener(this);
}
public void actionPerformed(ActionEvent ae)
{
photoShop.f=false;
photoShop.co=false;
photoShop.cr=false;
photoShop.l=true;
photoShop.r=false;
photoShop.cl=false;
photoShop.f=false;
}
}
class Canva extends Canvas implements MouseMotionListener,MouseListener
{

PhotoShop photoShop;
Canva(PhotoShop photoShop)
{
this.photoShop=photoShop;
this.setSize(300,300);
this.addMouseMotionListener(this);
this.addMouseListener(this);
}
public void paint(Graphics g)
{
g.setColor(Color.black);
if(photoShop.l==true)
g.drawLine(photoShop.xf,photoShop.yf,photoShop.x,photoShop.y);
if(photoShop.cr==true)
g.drawOval(photoShop.xf,photoShop.yf,photoShop.x,photoShop.y);
if(photoShop.r==true)
g.drawRect(photoShop.xf,photoShop.yf,photoShop.x,photoShop.y);
this.validate();
}
public void mouseDragged(MouseEvent me)
{
photoShop.x=me.getX();photoShop.y=me.getY();
repaint();
}
public void mouseMoved(MouseEvent me){}
public void mousePressed(MouseEvent me)
{
photoShop.xf=me.getX();photoShop.yf=me.getY();
repaint();
}
public void mouseEntered(MouseEvent me){}
public void mouseClicked(MouseEvent me){}
public void mouseExited(MouseEvent me){}
public void mouseReleased(MouseEvent me)
{
photoShop.x=me.getX();photoShop.y=me.getY();
repaint();
}

}
...全文
157 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jy00057800 2004-12-23
  • 打赏
  • 举报
回复
恩上面的改动可以 不过太过“高深” 我门才学半学期 刚学到鼠标接口这!
我想用鼠标接口的方法实现 并且不改变原来的程序结构
这样该怎么做呢
谢谢
thomas_20 2004-12-22
  • 打赏
  • 举报
回复
重写update
射天狼 2004-12-22
  • 打赏
  • 举报
回复
private void swapPoint(Point aPt, Point aPts)
{
int intTmp;

if (aPt.x > aPts.x)
{
intTmp = aPt.x;
aPt.x = aPts.x;
aPts.x = intTmp;
}

if (aPt.y > aPts.y)
{
intTmp = aPt.y;
aPt.y = aPts.y;
aPts.y = intTmp;
}
}

/* (non-Javadoc)
* @see java.awt.Component#update(java.awt.Graphics)
*/
//当画图时调用此方法重绘
public void update(Graphics g)
{
super.paint(g);
big = (Graphics2D) g;

if (ptDown == null)
return;
if (ptMove == null)
return;
if (ptMoveOld == null)
return;
//Erase Old ======================
g.setColor(getBackground());
g.drawLine(ptDown.x, ptDown.y, ptMoveOld.x, ptMoveOld.y);
if (ptMoveOld.x > ptDown.x)
{
if (ptMoveOld.y > ptDown.y)
{
g.drawRect(
ptDown.x,
ptDown.y,
ptMoveOld.x - ptDown.x,
ptMoveOld.y - ptDown.y);
g.drawOval(
ptDown.x,
ptDown.y,
ptMoveOld.x - ptDown.x,
ptMoveOld.y - ptDown.y);
}
else
{
g.drawRect(
ptDown.x,
ptMoveOld.y,
ptMoveOld.x - ptDown.x,
ptDown.y - ptMoveOld.y);
g.drawOval(
ptDown.x,
ptMoveOld.y,
ptMoveOld.x - ptDown.x,
ptDown.y - ptMoveOld.y);
}
}
else
{
if (ptMoveOld.y > ptDown.y)
{
g.drawRect(
ptMoveOld.x,
ptDown.y,
ptDown.x - ptMoveOld.x,
ptMoveOld.y - ptDown.y);
g.drawOval(
ptMoveOld.x,
ptDown.y,
ptDown.x - ptMoveOld.x,
ptMoveOld.y - ptDown.y);
}
else
{
g.drawRect(
ptMoveOld.x,
ptMoveOld.y,
ptDown.x - ptMoveOld.x,
ptDown.y - ptMoveOld.y);
g.drawOval(
ptMoveOld.x,
ptMoveOld.y,
ptDown.x - ptMoveOld.x,
ptDown.y - ptMoveOld.y);
}
}

//Draw New ======================
g.setColor(Color.BLACK);
g.drawLine(ptDown.x, ptDown.y, ptMove.x, ptMove.y);
if (ptMove.x > ptDown.x)
{
if (ptMove.y > ptDown.y)
{
g.drawRect(
ptDown.x,
ptDown.y,
ptMove.x - ptDown.x,
ptMove.y - ptDown.y);
g.drawOval(
ptDown.x,
ptDown.y,
ptMove.x - ptDown.x,
ptMove.y - ptDown.y);
}
else
{
g.drawRect(
ptDown.x,
ptMove.y,
ptMove.x - ptDown.x,
ptDown.y - ptMove.y);
g.drawOval(
ptDown.x,
ptMove.y,
ptMove.x - ptDown.x,
ptDown.y - ptMove.y);
}
}
else
{
if (ptMove.y > ptDown.y)
{
g.drawRect(
ptMove.x,
ptDown.y,
ptDown.x - ptMove.x,
ptMove.y - ptDown.y);
g.drawOval(
ptMove.x,
ptDown.y,
ptDown.x - ptMove.x,
ptMove.y - ptDown.y);
}
else
{
g.drawRect(
ptMove.x,
ptMove.y,
ptDown.x - ptMove.x,
ptDown.y - ptMove.y);
g.drawOval(
ptMove.x,
ptMove.y,
ptDown.x - ptMove.x,
ptDown.y - ptMove.y);
}
}

ptMoveOld = ptMove;
strStatus =
ptDown.x
+ ", "
+ ptDown.y
+ " "
+ Math.abs(ptDown.x - ptMove.x)
+ ", "
+ Math.abs(ptDown.y - ptMove.y);
lblStatus.setText(strStatus);
}
}
射天狼 2004-12-22
  • 打赏
  • 举报
回复
/*
* Created on 2004-9-26
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package drawline;

/**
* @author 崔占民
*
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Label;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;

import javax.swing.SwingUtilities;

public class DrawLine extends Frame
{

public static void main(String[] args)
{
DrawLine frame = new DrawLine();
Dimension dmnScreen = Toolkit.getDefaultToolkit().getScreenSize();
Dimension dmnMain = new Dimension(650, 550);

frame.setTitle("画图测试");
frame.setSize(dmnMain);
frame.setLocation(
(dmnScreen.width - dmnMain.width) / 2,
(dmnScreen.height - dmnMain.height) / 2);
frame.setVisible(true);
}
private ArrayList altPtDown = new ArrayList();
private ArrayList altPtUp = new ArrayList();
private Graphics2D big;
private Label lblStatus = new Label();
private Point ptDown;
private Point ptMove;
private Point ptMoveOld;
private String strStatus;

DrawLine()
{
super ();
init();
}

private void init()
{
add(lblStatus, BorderLayout.SOUTH);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent arg0)
{
System.exit(0);
}
});

this.addMouseMotionListener(new MouseMotionListener()
{
public void mouseDragged(MouseEvent arg0)
{
if (SwingUtilities.isLeftMouseButton(arg0))
{
ptMove = arg0.getPoint();
repaint();
}
}

public void mouseMoved(MouseEvent arg0)
{

}
});

this.addMouseListener(new MouseListener()
{
public void mouseClicked(MouseEvent arg0)
{

}

public void mouseEntered(MouseEvent arg0)
{

}

public void mouseExited(MouseEvent arg0)
{

}

public void mousePressed(MouseEvent arg0)
{
ptDown = new Point(arg0.getPoint());
ptMove = new Point(ptDown);
ptMoveOld = new Point(ptDown);
altPtDown.add(ptDown);
}

public void mouseReleased(MouseEvent arg0)
{
ptMove = new Point(arg0.getPoint());
altPtUp.add(ptMove);
ptDown = null;
ptMove = null;
ptMoveOld = null;
}
});
}

//当窗口被遮住,再显示的时候,调用此方法重绘
public void paint(Graphics g)
{
super.paint(g);
big = (Graphics2D) g;
g.setColor(Color.BLACK);

for (int i = 0; i < altPtDown.size(); i++)
{
ptDown = (Point) altPtDown.get(i);
ptMove = (Point) altPtUp.get(i);
if (ptMove.x > ptDown.x)
{
if (ptMove.y > ptDown.y)
{
g.drawRect(
ptDown.x,
ptDown.y,
ptMove.x - ptDown.x,
ptMove.y - ptDown.y);
g.drawOval(
ptDown.x,
ptDown.y,
ptMove.x - ptDown.x,
ptMove.y - ptDown.y);
}
else
{
g.drawRect(
ptDown.x,
ptMove.y,
ptMove.x - ptDown.x,
ptDown.y - ptMove.y);
g.drawOval(
ptDown.x,
ptMove.y,
ptMove.x - ptDown.x,
ptDown.y - ptMove.y);
}
}
else
{
if (ptMove.y > ptDown.y)
{
g.drawRect(
ptMove.x,
ptDown.y,
ptDown.x - ptMove.x,
ptMove.y - ptDown.y);
g.drawOval(
ptMove.x,
ptDown.y,
ptDown.x - ptMove.x,
ptMove.y - ptDown.y);
}
else
{
g.drawRect(
ptMove.x,
ptMove.y,
ptDown.x - ptMove.x,
ptDown.y - ptMove.y);
g.drawOval(
ptMove.x,
ptMove.y,
ptDown.x - ptMove.x,
ptDown.y - ptMove.y);
}
}
}
}

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧