`
rainytimes
  • 浏览: 7374 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

多态练手 Java绘图板

    博客分类:
  • J2SE
阅读更多
/***
DrawFrame 类文件内容:


Email:shun_shun@21cn.com

 
*****/

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class DrawFrame extends Frame {

CheckboxGroup cbg = new CheckboxGroup();
CheckboxGroup shapecbg = new CheckboxGroup();
CheckboxGroup shapeFillcbg = new CheckboxGroup();

Button btn_String =new Button("插入文字");



DrawPanel drawPanel   = new DrawPanel(this);




public void setFrame() {

   Button btn_clear = new Button("清屏");
   btn_clear.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e) {
     drawPanel.shapes.removeAll(drawPanel.shapes);
     drawPanel.repaint();
     drawPanel.shape = null;
    }
   
   });
  
  
  
   Label lab1 = new Label("ControlGroup");
   btn_clear.setBackground(Color.LIGHT_GRAY);

   Panel paramPanel = new Panel();
  
  

   paramPanel.setLayout(new GridLayout(3, 3));

   Checkbox cb1 = new Checkbox("Black", cbg, true);
   Checkbox cb2 = new Checkbox("Red", cbg, false);
   Checkbox cb3 = new Checkbox("Blue", cbg, false);

   Checkbox shapecb1 = new Checkbox("线", shapecbg, true);
   Checkbox shapecb2 = new Checkbox("圆", shapecbg, false);
   Checkbox shapecb3 = new Checkbox("方", shapecbg, false);
  
   Checkbox shapeFillcb1 = new Checkbox("实心", shapeFillcbg, false);
   Checkbox shapeFillcb2 = new Checkbox("空心", shapeFillcbg, true);
  
  

   paramPanel.add(cb1);
   paramPanel.add(cb2);
   paramPanel.add(cb3);

   paramPanel.add(lab1);

   paramPanel.add(shapecb1);
   paramPanel.add(shapecb2);
   paramPanel.add(shapecb3);
  
   //paramPanel.add(new Label());
  

  

   paramPanel.add(btn_clear);
  
  
   paramPanel.add(shapeFillcb1);
   paramPanel.add(shapeFillcb2);
  
   btn_String.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e){
     String str=JOptionPane.showInputDialog("输入字符 ");
     drawPanel.str=str;
    
    
    }
   });
  
   paramPanel.add(btn_String);

   paramPanel.setBackground(Color.LIGHT_GRAY);
  
  
  

   this.add(paramPanel, BorderLayout.NORTH);
   this.add(drawPanel,BorderLayout.CENTER);

   this.setSize(400, 400);
   this.setLocation(200, 200);
  
  
  
   this.addWindowListener(new WindowAdapter(){
    public void windowClosing(WindowEvent e){
     System.exit(0);
    }
   });
  
   this.setVisible(true);

}



public static void main(String[] args) {
   DrawFrame dp=new DrawFrame();
   dp.setFrame();

}

}




DrawPanel 文件代码:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelListener;
import java.util.ArrayList;


public class DrawPanel extends Panel {
DrawFrame df;
ArrayList<Shape> shapes =new ArrayList<Shape>();

//Graphics g = getGraphics();

Shape shape = null;

String str = null;

public DrawPanel(DrawFrame df){
   this.df=df;
   this.setBackground(Color.yellow);
   this.addMouseListener(new MousePaint1());
   this.addMouseMotionListener(new MousePaint2());
  
  
  
}


public void paint(Graphics g) {
   if(shape!= null)shape.draw(g);
   this.drawShape(g);
  
  
}
private Color getColor() {
   if(df.cbg.getSelectedCheckbox().getLabel()=="Blue")
       return Color.blue;
   if(df.cbg.getSelectedCheckbox().getLabel()=="Red")
    return Color.red;
   if(df.cbg.getSelectedCheckbox().getLabel()=="Black")
    return Color.black;
   return Color.black;
  
  
}
private Shape getShape() {
//System.out.println("return share");
   if(str != null)
    return new Word();
   if(df.shapecbg.getSelectedCheckbox().getLabel()=="线")
       return new Line();
   if(df.shapecbg.getSelectedCheckbox().getLabel()=="方")
    return new Rec();
   if(df.shapecbg.getSelectedCheckbox().getLabel()=="圆")
    return new Circular();
  
  
   return new Line();
  
  
}

private boolean getFill(){
   if(df.shapeFillcbg.getSelectedCheckbox().getLabel()=="实心")
       return true;
   return false;
}

private void drawShape(Graphics g){
   for(int i=0; i<shapes.size(); i++){
    shapes.get(i).draw(g);
   
   }
}

class MousePaint1 extends MouseAdapter   {


public void mousePressed(MouseEvent e) {
   shape=getShape();
//shape=new Shape();
   shape.x = e.getX();
   shape.y = e.getY();
   shape.c = getColor();
   shape.fill=getFill();
   shape.str=str;
//shape.g = g;
//System.out.println("Press");
  
}


public void mouseReleased(MouseEvent e) {
   if(shape != null)
   shapes.add(shape);
   shape = null;
   str = null;
   repaint();
  
System.out.println(shapes.size());
  
}


}

class MousePaint2 extends MouseMotionAdapter {

public void mouseDragged(MouseEvent e) {
  
   shape.x1=e.getX();
   shape.y1=e.getY();
   //shape.draw(g);
   repaint();
//System.out.println("draw current");
  
}

public void mouseMoved(MouseEvent e) {
  
  
}


}


}


Shape 文件代码,这是所有图形的父类,以此实现多态:

import java.awt.Color;
import java.awt.Graphics;


public class Shape {

int x;
int y;
int x1;
int y1;
int width;
int height;
Color c;
String str = null;
boolean fill = false;

//Graphics g;

public void draw(Graphics g) {
//System.out.println("shape draws");
//g.draw3DRect(20, 20, 20, 20, true);
  
}

public int getDrawX(){
   if(x>x1)return x1;
   return x;
}
public int getDrawY(){
   if(y>y1)return y1;
   return y;
}
public int getWidth() {
   return Math.abs(x-x1);
}
public int getHeight() {
   return Math.abs(y-y1);
}

}



Line 文件代码:

import java.awt.Color;
import java.awt.Graphics;


public class Line extends Shape {



public void draw(Graphics g) {
  
//System.out.println("draw line");  
   Color currcolor=g.getColor();
   g.setColor(c);
   g.drawLine(x, y, x1, y1);
   g.setColor(currcolor);
}



}



Rec 文件代码:

import java.awt.Color;
import java.awt.Graphics;


public class Rec extends Shape {


public void draw(Graphics g) {
  
  
  
  
   Color currcolor=g.getColor();
   g.setColor(c);
  
   if(this.fill==true){
    g.fill3DRect(this.getDrawX(),this.getDrawY(), this.getWidth(), this.getHeight(), true);
   }
   else 
    g.draw3DRect(this.getDrawX(),this.getDrawY(), this.getWidth(), this.getHeight(), true);
   
   g.setColor(currcolor);
    
}

}



Word 文件代码:

import java.awt.Color;
import java.awt.Graphics;


public class Word extends Shape {

public void draw(Graphics g) {
  
   Color currcolor=g.getColor();
   g.setColor(c);
  
   g.drawString(str, x, y);
System.out.println("word");
   
   g.setColor(currcolor);
}

}



分享到:
评论

相关推荐

    绘图板课程设计报告 JAVA

    **绘图板课程设计报告——基于JAVA的实现** 在计算机科学与技术领域,尤其是在软件工程中,课程设计是一项重要的实践环节,它旨在让学生通过实际操作掌握特定编程语言或技术的应用。本报告将深入探讨一个使用Java...

    java多态练习题

    java多态、继承练习题,包含题目与答案,............................................................................................................

    Java多态的讲解

    Java多态的讲解

    Java 语言程序设计:第5章接口多态.ppt

    Java 语言程序设计第 5 章接口多态 本章主要讲解 Java 语言程序设计中接口和多态的概念、语法和应用。接口是 Java 语言中的一种抽象机制,它提供了一种定义类之间的“协议”的方式,允许类之间实现多继承,同时免除...

    多态表现(java)

    多态的列子其中涉及到封装是java适应于java初学者学习和模仿,

    java多态的总结

    在Java中,多态分为编译时多态和运行时多态。编译时多态主要体现在方法的重载(Overloading),即在同一个类中可以有多个同名方法,但参数列表不同。编译器会根据传入参数的类型和数量来决定调用哪个方法。运行时...

    java的编译时多态和运行时多态

    Java 编译时多态和运行时多态 Java 编译时多态和运行时多态是 Java 语言中两个重要的概念,它们都是多态性的实现方式,但它们在实现机制和应用场景上有所不同。 编译时多态 编译时多态是指在编译期根据参数列表的...

    Educoder题目:Java面向对象 - 封装、继承和多态答案解析.md

    Educoder题目:Java面向对象 - 封装、继承和多态答案解析

    java面向对象三要素封装继承和多态源码

    java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素...

    继承和多态的相关Java源码下载

    Java是一种广泛使用的面向对象的编程语言,其核心概念包括封装、继承和多态。在Java中,继承允许一个类(子类)从另一个类(父类)中获取属性和方法,从而实现代码重用和扩展。多态则是面向对象编程中的另一个关键...

    java中实现多态的机制Java系列2021.pdf

    在Java编程语言中,多态是面向对象编程的核心概念之一,它允许我们通过共通接口调用不同对象的行为。多态可以实现代码的可扩展性和可维护性,提升程序的灵活性和复用性。本篇文档将详细介绍Java中实现多态的机制,...

    Java程序设计基础教程(共10单元)单元4 继承和多态.pdf

    Java程序设计基础教程(共10单元)单元4 继承和多态.pdfJava程序设计基础教程(共10单元)单元4 继承和多态.pdfJava程序设计基础教程(共10单元)单元4 继承和多态.pdfJava程序设计基础教程(共10单元)单元4 继承和多态.pdf...

    java中多态实现

    java多态实现的课件,给那些需要的人 讲述了java多态的概念、分类、实现 综合案例讲解、总结多态的作用

    Java实验报告——类的继承、多态的应用

    在本实验报告中,我们将深入探讨Java编程中的两个核心概念:类的继承和多态的应用。实验主要目标是加深对抽象类和抽象方法的理解,并掌握如何在实际编码中实现类的继承以及多态性。 首先,让我们理解抽象类和抽象...

    Java源码小合集:继承和多态相关的例子.rar

    继承和多态的相关Java源码下载,比较散,像覆盖和重载、对象类Object和它的toString()方法、多态性、动态绑定和一般程序设计、数组线性表ArrayList类、final类、方法和变量、数据域和静态方法的隐藏、调用父类的方法...

    10-JAVA-多态

    JAVA多态思维导图,便捷整理思路,多态的好处、多态的语法格式、多态中的两种类型转换:向上转型、向下转型

    源代码+报告-Java的继承和多态编程

    在Java编程中,继承和多态是面向对象编程的核心概念,它们在软件设计中起着至关重要的作用。在这个实验中,我们看到一个具体的应用场景,即实现一个小型公司的工资管理系统,来阐述这两个概念。 首先,让我们理解...

    java中多态的内存分析

    多态性分为编译时多态和运行时多态,其中运行时多态是Java中最常见的形式,也称为动态绑定。在深入探讨Java中多态的内存分析之前,我们需要先理解一些基本概念。 首先,了解Java内存模型至关重要。Java程序运行时...

    北大青鸟javaOOP多态Ch03作业全集.rar

    "北大青鸟javaOOP多态Ch03作业全集.rar"这个压缩包文件很显然是针对学习者提供的一系列关于Java多态性的练习和案例,帮助学生深入理解并掌握这一核心技能。 多态性是面向对象三大特性之一,另外两个是封装和继承。...

    java基础继承封装多态

    本资源摘要信息将对 Java 基础知识点进行总结,涵盖继承、封装、多态等概念,并对面向对象的设计、数据库设计模式等进行讲解。 继承 继承是 Java 中的一种机制,允许一个类继承另一个类的属性和方法。继承的语法是...

Global site tag (gtag.js) - Google Analytics