/***
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 语言程序设计第 5 章接口多态 本章主要讲解 Java 语言程序设计中接口和多态的概念、语法和应用。接口是 Java 语言中的一种抽象机制,它提供了一种定义类之间的“协议”的方式,允许类之间实现多继承,同时免除...
多态的列子其中涉及到封装是java适应于java初学者学习和模仿,
在Java中,多态分为编译时多态和运行时多态。编译时多态主要体现在方法的重载(Overloading),即在同一个类中可以有多个同名方法,但参数列表不同。编译器会根据传入参数的类型和数量来决定调用哪个方法。运行时...
Java 编译时多态和运行时多态 Java 编译时多态和运行时多态是 Java 语言中两个重要的概念,它们都是多态性的实现方式,但它们在实现机制和应用场景上有所不同。 编译时多态 编译时多态是指在编译期根据参数列表的...
Educoder题目:Java面向对象 - 封装、继承和多态答案解析
java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素封装继承和多态源码java面向对象三要素...
Java是一种广泛使用的面向对象的编程语言,其核心概念包括封装、继承和多态。在Java中,继承允许一个类(子类)从另一个类(父类)中获取属性和方法,从而实现代码重用和扩展。多态则是面向对象编程中的另一个关键...
在Java编程语言中,多态是面向对象编程的核心概念之一,它允许我们通过共通接口调用不同对象的行为。多态可以实现代码的可扩展性和可维护性,提升程序的灵活性和复用性。本篇文档将详细介绍Java中实现多态的机制,...
Java程序设计基础教程(共10单元)单元4 继承和多态.pdfJava程序设计基础教程(共10单元)单元4 继承和多态.pdfJava程序设计基础教程(共10单元)单元4 继承和多态.pdfJava程序设计基础教程(共10单元)单元4 继承和多态.pdf...
java多态实现的课件,给那些需要的人 讲述了java多态的概念、分类、实现 综合案例讲解、总结多态的作用
在本实验报告中,我们将深入探讨Java编程中的两个核心概念:类的继承和多态的应用。实验主要目标是加深对抽象类和抽象方法的理解,并掌握如何在实际编码中实现类的继承以及多态性。 首先,让我们理解抽象类和抽象...
继承和多态的相关Java源码下载,比较散,像覆盖和重载、对象类Object和它的toString()方法、多态性、动态绑定和一般程序设计、数组线性表ArrayList类、final类、方法和变量、数据域和静态方法的隐藏、调用父类的方法...
JAVA多态思维导图,便捷整理思路,多态的好处、多态的语法格式、多态中的两种类型转换:向上转型、向下转型
在Java编程中,继承和多态是面向对象编程的核心概念,它们在软件设计中起着至关重要的作用。在这个实验中,我们看到一个具体的应用场景,即实现一个小型公司的工资管理系统,来阐述这两个概念。 首先,让我们理解...
多态性分为编译时多态和运行时多态,其中运行时多态是Java中最常见的形式,也称为动态绑定。在深入探讨Java中多态的内存分析之前,我们需要先理解一些基本概念。 首先,了解Java内存模型至关重要。Java程序运行时...
"北大青鸟javaOOP多态Ch03作业全集.rar"这个压缩包文件很显然是针对学习者提供的一系列关于Java多态性的练习和案例,帮助学生深入理解并掌握这一核心技能。 多态性是面向对象三大特性之一,另外两个是封装和继承。...
本资源摘要信息将对 Java 基础知识点进行总结,涵盖继承、封装、多态等概念,并对面向对象的设计、数据库设计模式等进行讲解。 继承 继承是 Java 中的一种机制,允许一个类继承另一个类的属性和方法。继承的语法是...