跪求JAVA高手,我在网上找到一段代码,求注释

http://zhidao.baidu.com/link?url=y-AiUBk8G0yq2DyURZ7i3C6PU2HuWDYvwmpP7PjEieLirRpRi5_0... http://zhidao.baidu.com/link?url=y-AiUBk8G0yq2DyURZ7i3C6PU2HuWDYvwmpP7PjEieLirRpRi5_0eFER-BA46eyssliVEQNk3z_jSBxOxbP02_

这个地址,望高手帮忙
展开
 我来答
百度网友fe6d0b6
2013-12-26 · TA获得超过275个赞
知道小有建树答主
回答量:397
采纳率:75%
帮助的人:270万
展开全部

基本做到每句都有注释,满意不?

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个内部类的代码

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式