跪求JAVA高手,我在网上找到一段代码,求注释
http://zhidao.baidu.com/link?url=y-AiUBk8G0yq2DyURZ7i3C6PU2HuWDYvwmpP7PjEieLirRpRi5_0...
http://zhidao.baidu.com/link?url=y-AiUBk8G0yq2DyURZ7i3C6PU2HuWDYvwmpP7PjEieLirRpRi5_0eFER-BA46eyssliVEQNk3z_jSBxOxbP02_
这个地址,望高手帮忙 展开
这个地址,望高手帮忙 展开
1个回答
展开全部
基本做到每句都有注释,满意不?
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
/**
* 画笔定义,这是一个接口,提供绘图方法接口。
*/
interface Brush {
/**
* 绘图方法
*/
void doPaint(Graphics g);
}
/**
* 画笔工厂,
*/
class BrushFactory {
//调用getBrush(int )时,传入的指定画笔索引的参数
static final int LINE_BRUSH = 0; //获取画线段画笔的参数
static final int ELLIPSE_BBRUSH = 1;//获取画空心椭圆的画笔的参数
static final int RECTANGLE_BRUSH = 2; //获取画空心矩形的画笔的参数
static final int POLYGON_BRUSH = 3;//获取画空心多边形的画笔的参数
static final int ELLIPSE_FILL_BRUSH = 4; //获取画实心椭圆型画笔的参数
static final int RECTANGLE_FILL_BRUSH = 5; //获取画实心矩形的画笔的参数
//定义并生产出一个NONE画笔
static final Brush NO = new NONE();
//定义并生产出一个画线段的画笔
static final Brush LINE = new LineBrush();
//定义并生产出一个画空心椭圆型的画笔
static final Brush ELLIPSE = new EllipseBrush();
//定义并生产出一个画实心椭圆型并的画笔。
static final Brush ELLIPSE_FILL = new EllipseFillBrush();
//定义并生产出一个画空心矩形的画笔
static final Brush RECTANGLE = new RectangleBrush();
//定义并生产出一个画实心矩形的画笔
static final Brush RECTANGLE_FILL = new RectangleFillBrush();
//定义并生产出一个画空心多边形的画笔
static final Brush POLYGON = new PolygonBrush();
/**
* 根据指定的画笔索引,返回指定的画笔。参数列表为:<br/>
* BrushFactory.LINE_BRUSH 画线段画笔<br/>
* BrushFactory.ELLIPSE_BBRUSH 画空心椭圆的画笔<br/>
* BrushFactory.RECTANGLE_BRUSH 画空心矩形的画笔<br/>
* BrushFactory.POLYGON_BRUSH 画空心多边形的画笔<br/>
* BrushFactory.ELLIPSE_FILL_BRUSH 画实心椭圆型画笔<br/>
* BrushFactory.RECTANGLE_FILL_BRUSH 画实心矩形的画笔<br/>
* 不在此列表的参数,返回NONE画笔。
* @param brushIndex
* @return
*/
Brush getBrush(int brushIndex){
switch(brushIndex){
case LINE_BRUSH:return LINE;
case ELLIPSE_BBRUSH:return ELLIPSE;
case RECTANGLE_BRUSH:return RECTANGLE;
case RECTANGLE_FILL_BRUSH:return RECTANGLE_FILL;
case POLYGON_BRUSH:return POLYGON;
case ELLIPSE_FILL_BRUSH:return ELLIPSE_FILL;
default:return NO;
}
}
/**
* 画线段画笔类<br/>
* 内部类,继承了画笔接口,实现了画笔方法,该类实现的画笔方法为画一线段。
*/
private static final class LineBrush implements Brush {
public void doPaint(Graphics g) {
Graphics gg =g.create(); //创建一个新的画图对象
gg.setColor(Color.BLACK); //设置画笔颜色为黑色
gg.drawLine(70,70, 200,200); //画一个线段,起点坐标为X=70,Y=70,终点坐标为X=200,Y=200
gg.dispose(); //释放掉新创建的画图对象
}
}
/**
* 画空心椭圆画笔类<br/>
* 内部类,继承了画笔接口,实现了画笔方法,该类实现的画笔方法为画一空心椭圆。
*/
private static final class EllipseBrush implements Brush {
public void doPaint(Graphics g) {
Graphics gg =g.create(); //创建一个新的画图对象
gg.setColor(Color.PINK); //设置画笔颜色为PINK
//画一个空心椭圆形,其中:
//x - 要绘制椭圆的左上角的 x 坐标 = 100
//y - 要绘制椭圆的左上角的 y 坐标 = 100
//width - 要绘制椭圆的宽度 = 200
//height - 要绘制椭圆的高度 = 50
gg.drawOval(100,100,200,50);
gg.dispose();//释放掉新创建的画图对象
}
}
/**
* 画实心椭圆画笔类<br/>
* 内部类,继承了画笔接口,实现了画笔方法,该类实现的画笔方法为画一实心椭圆。
*/
private static final class EllipseFillBrush implements Brush {
public void doPaint(Graphics g) {
Graphics gg =g.create();//创建一个新的画图对象
gg.setColor(Color.PINK); //设置画笔颜色为PINK
//画一个椭圆形并填充,其中:
//x - 要绘制椭圆的左上角的 x 坐标 = 100
//y - 要绘制椭圆的左上角的 y 坐标 = 100
//width - 要绘制椭圆的宽度 = 200
//height - 要绘制椭圆的高度 = 50
gg.fillOval(100,100,200,50);
gg.dispose();//释放掉新创建的画图对象
}
}
/**
* 画空心多边形画笔类<br/>
* 内部类,继承了画笔接口,实现了画笔方法,该类实现的画笔方法为画一空心多边形。
*/
private static final class PolygonBrush implements Brush {
public void doPaint(Graphics g) {
Graphics gg =g.create();//创建一个新的画图对象
gg.setColor(Color.RED); //设置画笔颜色为RED
//画一个空心多边形(这里为五边形),其中各点的坐标及边数为:
//X坐标集合:48,50,244,483,310
//Y坐标集合:36,192,281,302,77
//边数:5
gg.drawPolygon(new int[]{48,50,244,483,310}, new int[]{36,192,281,302,77}, 5);
gg.dispose();//释放掉新创建的画图对象
}
}
/**
* 画空心矩形画笔类<br/>
* 内部类,继承了画笔接口,实现了画笔方法,该类实现的画笔方法为画一空心矩形
*/
private static final class RectangleBrush implements Brush {
public void doPaint(Graphics g) {
Graphics gg =g.create();//创建一个新的画图对象
gg.setColor(Color.BLUE); //设置画笔颜色为BLUE
//画一个空心矩形,其中左上角与右下角坐标分别为:
//X=70,Y=70 X=100,Y=100
gg.drawRect(70,70,100,100);
gg.dispose();//释放掉新创建的画图对象
}
}
/**
* 画实心矩形画笔类<br/>
* 内部类,继承了画笔接口,实现了画笔方法,该类实现的画笔方法为画一实心矩形
*/
private static final class RectangleFillBrush implements Brush {
public void doPaint(Graphics g) {
Graphics gg =g.create();//创建一个新的画图对象
gg.setColor(Color.BLUE); //设置画笔颜色为BLUE
//画一个空心矩形并填充,其中左上角与右下角坐标分别为:
//X=70,Y=70 X=100,Y=100
gg.fillRect(70,70,100,100);
gg.dispose();//释放掉新创建的画图对象
}
}
/**
* NONE画笔类<br/>
* 内部类,继承了画笔接口,实现了画笔方法,该类实现的画笔方法为在屏幕上输出一段话:“No brush selected!”
*/
private static final class NONE implements Brush {
public void doPaint(Graphics g) {
Graphics gg =g.create();//创建一个新的画图对象
gg.setColor(Color.RED); //设置画笔颜色为BLUE
//在画布上画出一段文字,内容为:“No brush selected!”
gg.drawString("No brush selected!",20,30);
gg.dispose();//释放掉新创建的画图对象
}
}
}
/**
* 图形界面
* @author Hardneedl
*/
final class Draw extends JFrame {
//覆盖取JFrame的getTitle()方法,此处的作用为设置窗口的标题为指定内容(“frame title"”)
public String getTitle() {return "frame title";}
//定义一个窗口的大小宽600,高400(单位像素)。
static private final Dimension size = new Dimension(600, 400);
//覆盖取JFrame的getPreferredSize()方法,此处的作用为设置窗口的首选大小为定义的Size。
public Dimension getPreferredSize() {return size;}
//覆盖取JFrame的getMaximumSize()方法,此处的作用为设置窗口的最大大小为定义的Size。
public Dimension getMaximumSize() {return size;}
//覆盖取JFrame的getMinimumSize()方法,此处的作用为设置窗口的最小大小为定义的Size。
public Dimension getMinimumSize() {return size;}
//覆盖取JFrame的getSize()方法,此处的作用为返回窗口当前的大小,当前返回的为定义的Size。
public Dimension getSize() {return size;}
//定义并产生一个画线段菜单触发事件侦听处理器。
private static final Action lineAction = new LineAction();
//定义并产生一个画空心矩形操作触发事件侦听处理器。
private static final Action rectangleAction=new RectangleAction();
//定义并产生一个画实心矩形操作触发事件侦听处理器。
private static final Action rectangleFillAction=new RectangleFillAction();
//定义并产生一个画空心椭圆形操作触发事件侦听处理器。
private static final Action ellipseAction=new EllipseAction();
//定义并产生一个画实心矩形操作触发事件侦听处理器。
private static final Action ellipseFillAction=new EllipseFillAction();
//定义并产生一个画空心多边形操作触发事件侦听处理器。
private static final Action polygonAction = new PolygonAction();
//定义并产生一个生产画笔的工厂对象
private static final BrushFactory brushFactory = new BrushFactory();
//定义一个画笔对象
private static Brush brush;
/**
* 定义并产生一个除顶层容器之外所有容器的基类控件,并覆盖实现该类的绘制界面方法。在覆盖的方法里,调用画笔的绘图方法。<br/>
* 同时覆盖了获取控件边框的方法。在方法里创建并返回一个颜色为BLACK,宽度为2的边框。<br/>
* 此处的功能为:将该控件作为画布,画笔将在该控件上绘制图形。
*/
private final static JComponent canvas = new JComponent(){
protected void paintComponent(Graphics g) {
super.paintComponent(g); //调用父类的绘制界面方法
if (brush!=null){ //如果当前有画笔,则调用当前画笔的绘图方法。
brush.doPaint(g);
}
}
//覆盖获取边框的方法。
public Border getBorder() {return BorderFactory.createLineBorder(Color.BLACK,2);}
};
/**
* 图形界面的构造函数。
* @throws HeadlessException
*/
Draw() throws HeadlessException {
init(); //调用创建界面控件的方法
attachListeners(); //调用给控件增加事件侦听的方法
doLay(); //调用布局界面控件的方法
}
/**
* 创建并初始化的界面控件
*/
private void init() {
JMenuBar menuBar = new JMenuBar(); //创建一个菜单栏
menuBar.add(new JMenu(lineAction)); //创建一个菜单项并加入菜单栏,菜单项对应的操作为画线段操作。
JMenu elp = new JMenu("椭圆");//创建一个显示为“椭圆”的菜单
elp.add(ellipseAction); //将画空心椭圆操作加入“椭圆”菜单
elp.add(ellipseFillAction); //将画实心椭圆操作加入“椭圆”菜单
menuBar.add(elp); //将“椭圆”菜单加入菜单栏
JMenu rct = new JMenu("矩形"); //创建一个显示为“矩形”的菜单
rct.add(rectangleAction); //将画空心矩形操作加入“矩形”菜单
rct.add(rectangleFillAction); //将画实心矩形操作加入“矩形”菜单
menuBar.add(rct); //将“矩形”菜单加入菜单栏
menuBar.add(new JMenu(polygonAction)); //创建一个菜单项并加入菜单栏,菜单项对应的操作为画空心多边形操作。
setJMenuBar(menuBar); //设置当前窗口的菜单栏为设置好的菜单栏。
}
/**
* 增加事件侦听
*/
private void attachListeners() {
//设置当前窗口的默认的关闭事件操作为退出并关闭窗口。
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
/**
* 布局界面控件
*/
private void doLay() {
//获取当前窗口的容器面板
Container container = getContentPane();
//将画布加入容器面板
container.add(canvas,BorderLayout.CENTER);
//创建一个布局为2行3列的矩形网格布局的面板容器。
JPanel buttonsPane = new JPanel(new GridLayout(2,3));
//创建一个画线段的按钮并加入创建的面板容器
buttonsPane.add(new JButton(lineAction));
//创建一个画空心椭圆的按钮并加入创建的面板容器
buttonsPane.add(new JButton(ellipseAction));
//创建一个画空心矩形的按钮并加入创建的面板容器
buttonsPane.add(new JButton(rectangleAction));
//创建一个画空心多边形的按钮并加入创建的面板容器
buttonsPane.add(new JButton(polygonAction));
//创建一个占位控件,并加入创建的面板容器。
buttonsPane.add(Box.createHorizontalBox());
//创建一个画实心椭圆形的按钮并加入创建的面板容器
buttonsPane.add(new JButton(ellipseFillAction));
//创建一个画实心矩形的按钮并加入创建的面板容器
buttonsPane.add(new JButton(rectangleFillAction));
//将创建的面板加入窗口容器面板的最下面。
container.add(buttonsPane,BorderLayout.SOUTH);
//调整此窗口的大小,以适合其子组件的首选大小和布局。
//如果该窗口和/或其所有者还不可显示,则在计算首选大小之前都将变得可显示。
//在计算首选大小之后,将会验证该窗口。
pack();
setVisible(true); //显示窗口
}
//这中间的6个内部类的由于字数超过限制,无法发出,所以附图了。
/**
* 程序主接口,创建一个图形界面对象。
*/
public static void main(String[] args) {new Draw();}
}
//中间6个内部类的代码
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询