JAVA实验报告——简单绘图程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三绘制图形
一、实验目的
学会JButton的使用,能进行JButton的基本操作,能使用JButton构造一个图形界面框架通过实验熟悉swing图形用户界面程序设计熟悉java中的事件处理模型,每个事件动作代表的意义进一步提高编程能力,学会独立思考,学会上网查找资料决问题。

二、实验内容
设计一个程序,该程序能够绘制基本的图形(包括圆形、矩形、直线等);要求有一个简单易操作的用户界面(包括菜单、按钮等组件)。

编写的程序要求能够实现保存和读取的功能。

三、实验代码
Main.java
import ;
import ;
import ;
import
import
import
import winpaint.WinToolBar;
import winpaint.windowsPaint;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
JPanel paintWin = new windowsPaint("画图");
paintWin.setBounds(0, 30, 1000, 1000);
paintWin.setLayout(null);
paintWin.setVisible(true);
JToolBar tool = new WinToolBar((windowsPaint)paintWin);
tool.setBounds(0, 0, 1000, 30);
tool.setVisible(true);
JFrame frame = new JFrame();
frame.setLayout(null);
frame.setVisible(true);
frame.setBounds(0, 0, 1000, 1000);
frame.add(tool);
frame.add(paintWin);
}
}
test.java
import base.GrapicsElem;
import base.Rect;
public class testfractor {
/**
* @param args
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws ClassNotFoundException { // TODO Auto-generated method stub
GrapicsElem Ge = new Rect();
Class<?> demo1=null;
Class<?> demo2=null;
Class<?> demo3=null;
try{
//一般尽量采用这种形式
demo1=Class.forName("base.Rect");
Class<?> con= demo1.getSuperclass();
demo2 = Class.forName("base.GrapicsElem");
Class<?> suns[] = demo2.getInterfaces();
for (int i = 0; i < suns.length; i++) {
}
// GrapicsElem gg = (GrapicsElem)con[0].newInstance();
con[0]);
con[1]);
con[2]);
}catch(Exception e){
e.printStackTrace();
}
demo2=new Rect().getClass();
demo3=Rect.class;
}
}
GrapicsElem.java
package base;
import
import
import
public abstract class GrapicsElem {
Point start;
Point end;
private Color color;
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
public void setStart(Point start) {
this.start = start;
}
public void setEnd(Point end) {
this.end = end;
}
public abstract void doMousePress(Point p);
public abstract void doMouseDrag(Point p);
public abstract void doMouseRelease(Point p);
public abstract void draw(Graphics g ) ;
}
Line.java
package base;
import
import
import
public class Line extends GrapicsElem {
ArrayList<Point> track;
public Line(){
track = new ArrayList<Point>();
}
@Override
public void draw(Graphics g) {
for (int i = 0; i < track.size()-1; i++) {
Point cur = track.get(i);
Point next = track.get(i+1);
g.drawLine(cur.x, cur.y, next.x, next.y);
}
}
private void AddPoint(Point p){
track.add(p);
}
@Override
public void doMousePress(Point p) {
// TODO Auto-generated method stub
AddPoint(p);
}
@Override
public void doMouseDrag(Point p) {
// TODO Auto-generated method stub
AddPoint(p);
}
@Override
public void doMouseRelease(Point p) {
// TODO Auto-generated method stub
AddPoint(p);
}
}
Rect.java
package base;
import
import
public class Rect extends GrapicsElem {
int x,y,width,height;
@Override
public void draw(Graphics g) {
// TODO Auto-generated method stub
g.drawRect(getX(), getY(), getWidth(), getHeight());
}
@Override
public void doMousePress(Point p) {
super.setStart(p);
super.setEnd(p);
}
@Override
public void doMouseDrag(Point p) {
super.setEnd(p);
}
@Override
public void doMouseRelease(Point p) {
super.setEnd(p);
}
public int getX() {
return Math.min(start.x, end.x);
}
public int getY() {
return Math.min(start.y, end.y);
}
public int getWidth() {
return Math.abs(start.x-end.x);
}
public int getHeight() {
return Math.abs(start.y-end.y);
}
}
Circle.java
package base;
import
public class Circle extends Rect {
@Override
public void draw(Graphics g) {
// TODO Auto-generated method stub
g.drawOval(getX(), getY(), getWidth(), getHeight());
}
}
windowsPaint.java
package winpaint;
import base.Circle;
import base.GrapicsElem;
import base.Line;
import base.Rect;
public class windowsPaint extends JPanel
implements MouseListener, MouseMotionListener {
String command = "矩形";
List<GrapicsElem> Lg = new ArrayList() ;
GrapicsElem cur;
JLabel label;
public windowsPaint(String title){
init();
}
private void init() {
addMouseListener(this);
addMouseMotionListener(this);
}
/**
* 可以使用反射去掉判断语句、
* Class<?> g = Class.forName("base.Rect");
* g.newInstance();
* @return
*/
private GrapicsElem newInstance(){
command = mand;
if(command.equals("矩形")){
return new Rect();
}else if(command.equals("圆形")){
return new Circle();
}else if(command.equals("线")){
return new Line();
}
return null;
}
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
//g2d.setColor(cur.getColor());
g2d.setStroke(new BasicStroke(10.0f));
for (int i = 0; i < Lg.size(); i++) {
GrapicsElem ge = Lg.get(i);
ge.draw(g);
}
}
// @Override
// public void repaint() {
// // TODO Auto-generated method stub
// // TODO Auto-generated method stub
// //
// super.repaint();
//// Thread thread = new Thread(new Runnable() {
//// @Override
//// public void run() {
//// // TODO Auto-generated method stub
//// try {
//// SaveToFile();
//// } catch (IOException e) {
//// // TODO Auto-generated catch block
//// e.printStackTrace();
//// }
//// }
//// });
//// thread.start();
////
//// ImageIcon bg = new ImageIcon("tmp.jpg");
//// if(bg!=null){
//// if(label!=null)
//// this.remove(label);
//// label = new JLabel(bg);
//// label.setBounds(0,0,bg.getIconWidth(),bg.getIconHeight()); //// this.add(label);
//// super.repaint();
//// }
////
// }
private void SaveToFile() throws IOException {
// TODO Auto-generated method stub
BufferedImage bimg = new BufferedImage(this.getWidth(), this.getHeight(), BufferedImage.TYPE_3BYTE_BGR);
Graphics2D g2d = bimg.createGraphics();
this.paint(g2d);
ImageIO.write(bimg, "jpg", new File("tmp.jpg"));
}
@Override
public void mousePressed(MouseEvent e) {
Point p = new Point(e.getX(),e.getY());
cur = newInstance();
cur.doMousePress(p);
Lg.add(cur);
}
@Override
public void mouseDragged(MouseEvent e) {
Point p = new Point(e.getX(),e.getY());
cur.doMouseDrag(p);
repaint();
}
@Override
public void mouseReleased(MouseEvent e) {
Point p = new Point(e.getX(),e.getY());
cur.doMouseRelease(p);
repaint();
}
@Override
public void mouseMoved(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}
WinToolBar.java
package winpaint;
public class WinToolBar extends JToolBar implements ActionListener{ public static String Command = "矩形";
JButton btn1,btn2,btn3;
//windowsPaint winp;
public WinToolBar(windowsPaint winP ){
btn1 = new JButton("矩形");
btn2 = new JButton("圆形");
btn3 = new JButton("线");
this.add(btn1);
this.add(btn2);
this.add(btn3);
btn1.addActionListener((ActionListener)this);
btn2.addActionListener((ActionListener)this);
btn3.addActionListener((ActionListener)this);
// this.winp =winP;
JComboBox com = new JComboBox();
com.addItem("红色");
com.addItem("蓝色");
com.addItem("黑色");
com.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
// TODO Auto-generated method stub
}
});
this.add(com);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
JButton btn = (JButton) e.getSource();
btn.setBackground(Color.green);
Command = btn.getActionCommand();
}
}
三、实验结果。

相关文档
最新文档