⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 painter.java

📁 Describes simple java code for developments. IT comtains 10 codes
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.lang.Math;
import javax.imageio.*;
import java.awt.geom.*; 
import java.awt.image.*;
import java.awt.image.*;
import java.awt.event.*;
import java.awt.Graphics;

public class Painter extends Frame implements ActionListener, MouseListener, MouseMotionListener, ItemListener 
{
    Point dot[] = new Point[1000]; 
    Point start = new Point(0, 0);
    Point end = new Point(0, 0);
    int dots = 0;
    private BufferedImage bufferedImage, tileImage;
    private Image image;
    private int imageWidth = 300;
    private int imageHeight = 300;
    private int offsetX = 50;
    private int offsetY = 60;
    private Color color = new Color(0, 0, 0);
    Menu menu1, menu2, menu3;
    MenuBar menubar;
    MenuItem openMenuItem, saveMenuItem, colorMenuItem, newMenuItem, 
        exitMenuItem;
    CheckboxMenuItem linesMenuItem, ellipsesMenuItem, 
        rectanglesMenuItem, roundedMenuItem, freehandMenuItem, 
        solidMenuItem, gradientMenuItem, textureMenuItem, 
        transparentMenuItem, textMenuItem, thickMenuItem, 
        plainMenuItem, shadowMenuItem;
    FileDialog dialog;
    private String drawText = "";
    boolean mouseUp = false;
    boolean dragging = false;
    boolean draw = false;
    boolean line = false;
    boolean ellipse = false;
    boolean rectangle = false;
    boolean rounded = false;
    boolean text = false;
    boolean solid = false;
    boolean shade = false;
    boolean transparent = false;
    boolean texture = false;
    boolean red = false;
    boolean green = false;
    boolean blue = false;
    boolean thick = false;
    boolean adjusted = false;
    boolean shadow = false;
    OkCancelDialog textDialog;

    public static void main(String[] args)
    {
        new Painter();
    }

    public Painter() 
    {
        setLayout(null);

        addMouseListener(this);
        addMouseMotionListener(this);

        menubar = new MenuBar();

        menu1 = new Menu("File");
        menu2 = new Menu("Draw");
        menu3 = new Menu("Effects");

        newMenuItem = new MenuItem("New");
        menu1.add(newMenuItem);
        newMenuItem.addActionListener(this);

        openMenuItem = new MenuItem("Open...");
        menu1.add(openMenuItem);
        openMenuItem.addActionListener(this);

        saveMenuItem = new MenuItem("Save As...");
        menu1.add(saveMenuItem);
        saveMenuItem.addActionListener(this);

        linesMenuItem = new CheckboxMenuItem("Draw lines");
        menu2.add(linesMenuItem);
        linesMenuItem.addItemListener(this);

        ellipsesMenuItem = new CheckboxMenuItem("Draw ellipses");
        menu2.add(ellipsesMenuItem);
        ellipsesMenuItem.addItemListener(this);

        rectanglesMenuItem = new CheckboxMenuItem("Draw rectangles");
        menu2.add(rectanglesMenuItem);
        rectanglesMenuItem.addItemListener(this);

        roundedMenuItem = new CheckboxMenuItem(
            "Draw rounded rectangles");
        menu2.add(roundedMenuItem);
        roundedMenuItem.addItemListener(this);

        freehandMenuItem = new CheckboxMenuItem("Draw freehand");
        menu2.add(freehandMenuItem);
        freehandMenuItem.addItemListener(this);

        plainMenuItem = new CheckboxMenuItem("Plain");
        menu3.add(plainMenuItem);
        plainMenuItem.addItemListener(this);

        solidMenuItem = new CheckboxMenuItem("Solid fill");
        menu3.add(solidMenuItem);
        solidMenuItem.addItemListener(this);

        gradientMenuItem = new CheckboxMenuItem("Gradient fill");
        menu3.add(gradientMenuItem);
        gradientMenuItem.addItemListener(this);

        textureMenuItem = new CheckboxMenuItem("Texture fill");
        menu3.add(textureMenuItem);
        textureMenuItem.addItemListener(this);

        transparentMenuItem = new CheckboxMenuItem("Transparent");
        menu3.add(transparentMenuItem);
        transparentMenuItem.addItemListener(this);

        textMenuItem = new CheckboxMenuItem("Draw text");
        menu2.add(textMenuItem);
        textMenuItem.addItemListener(this);

        thickMenuItem = new CheckboxMenuItem("Draw thick lines");
        menu3.add(thickMenuItem);
        thickMenuItem.addItemListener(this);

        shadowMenuItem = new CheckboxMenuItem("Drop shadow");
        menu3.add(shadowMenuItem);
        shadowMenuItem.addItemListener(this);

        colorMenuItem = new MenuItem("Select color...");
        menu3.add(colorMenuItem);
        colorMenuItem.addActionListener(this);

        exitMenuItem = new MenuItem("Exit");
        menu1.add(exitMenuItem);
        exitMenuItem.addActionListener(this);

        menubar.add(menu1);
        menubar.add(menu2);
        menubar.add(menu3);

        setMenuBar(menubar); 
        dialog = new FileDialog(this, "File Dialog");

        bufferedImage = new BufferedImage (imageWidth, imageHeight,           
           BufferedImage.TYPE_INT_BGR ); 

        setSize(400, 400);

        setTitle("Painter");
        setVisible(true);

        image = createImage(imageWidth, imageHeight);
        textDialog = new OkCancelDialog(this, "Enter your text", true);

        try{
           File inputFile = new File("tile.jpg"); 
           tileImage = ImageIO.read(inputFile); 
        } catch (java.io.IOException ioe){
            System.out.println("Need tile.jpg.");
            System.exit(0);
        }

        this.addWindowListener(new WindowAdapter(){
            public void windowClosing(
                WindowEvent e){
                    System.exit(0);
                }
            }
        );
    }
    
    public void mousePressed(MouseEvent e)
    {
        mouseUp = false;
        start = new Point(e.getX(), e.getY());
        adjusted=true;
        repaint(); 
    }

    public void mouseReleased(MouseEvent e)
    {
        if(rounded || line || ellipse || rectangle || draw || text){
            end = new Point(e.getX(), e.getY()); 
            mouseUp = true;
            dragging = false;
            adjusted=false;
            repaint(); 
        }
    }

    public void mouseDragged(MouseEvent e)
    {
        dragging = true;
        if(new Rectangle(offsetX, offsetY, 
            imageWidth, imageHeight).contains(e.getX(), e.getY())){
            if(draw){
                dot[dots] = new Point(e.getX(), e.getY());
                dots++;
            }
        }
        if(new Rectangle(offsetX, offsetY, 
            imageWidth, imageHeight).contains(start.x, start.y)){
            end = new Point(e.getX(), e.getY()); 
            repaint();
        }
    }

    public void mouseClicked(MouseEvent e){}
    public void mouseEntered(MouseEvent e){}
    public void mouseExited(MouseEvent e){}
    public void mouseMoved(MouseEvent e){}

    public void paint (Graphics g) 
    {
        Graphics2D gImage;
        Paint paint; 
        Composite composite; 

        if(!dragging && !adjusted){
            if(image == null){
                image = createImage(imageWidth, imageHeight);
            }
            gImage = (Graphics2D) image.getGraphics();
        }
        else{
            gImage = (Graphics2D) g;
            g.drawImage(image, offsetX, offsetY, this);
            g.drawRect(offsetX, offsetY, imageWidth, imageHeight);
            gImage.clip(new Rectangle2D.Double(offsetX, offsetY, 
                imageWidth, imageHeight));
        }

        composite = gImage.getComposite();

        if(color != null){
            gImage.setColor(color);
        } else {
            gImage.setColor(new Color(0, 0, 0));
        }

        if(thick){
            gImage.setStroke(new BasicStroke(10));
        } else{
            gImage.setStroke(new BasicStroke(1));
        }

        if (mouseUp || dragging) {
            Point tempStart, tempEnd;

            tempStart = new Point(Math.min(end.x, start.x), 
                Math.min(end.y, start.y)); 
            tempEnd = new Point(Math.max(end.x, start.x), 
                Math.max(end.y, start.y)); 

            tempStart = new Point(Math.max(tempStart.x, offsetX), 
                Math.max(tempStart.y, offsetY)); 
            tempEnd = new Point(Math.max(tempEnd.x, offsetX), 
                Math.max(tempEnd.y, offsetY)); 

            tempStart = new Point(Math.min(tempStart.x, 
                bufferedImage.getWidth() + offsetX), 
                Math.min(tempStart.y, bufferedImage.getHeight() + 
                offsetY)); 
            tempEnd = new Point(Math.min(tempEnd.x, 
                bufferedImage.getWidth() + offsetX), 
                Math.min(tempEnd.y, bufferedImage.getHeight() + 
                offsetY)); 

            if(!adjusted){
                tempEnd.x -= offsetX;
                tempEnd.y -= offsetY;
                tempStart.x -= offsetX;
                tempStart.y -= offsetY;
                end.x -= offsetX;
                end.y -= offsetY;
                start.x -= offsetX;
                start.y -= offsetY;
                adjusted=true;
            }

            int width = tempEnd.x - tempStart.x;
            int height = tempEnd.y - tempStart.y; 

            if(line){
                Line2D.Double drawLine = new Line2D.Double(start.x, 
                start.y, end.x, end.y);

                if(shadow){
                    paint = gImage.getPaint();
                    composite = gImage.getComposite();

                    gImage.setPaint(Color.black);
                    gImage.setComposite(AlphaComposite.getInstance
                        (AlphaComposite.SRC_OVER, 0.3f));

                    Line2D.Double line2 = 
                        new Line2D.Double(start.x + 9, start.y + 9, 
                        end.x + 9, end.y + 9);

                    gImage.draw(line2);

                    gImage.setPaint(paint);
                    gImage.setComposite(composite);
                }

                gImage.draw(drawLine);
            } 

            if(ellipse && width != 0 && height != 0){

                Ellipse2D.Double ellipse = 
                    new Ellipse2D.Double(tempStart.x, tempStart.y, 
                    width, height);

                if(shadow){
                    paint = gImage.getPaint();
                    composite = gImage.getComposite();

                    gImage.setPaint(Color.black);
                    gImage.setComposite(AlphaComposite.getInstance
                        (AlphaComposite.SRC_OVER, 0.3f));

                    Ellipse2D.Double ellipse2 = 
                        new Ellipse2D.Double(tempStart.x + 9, 
                        tempStart.y + 9, width, height);

                    if(solid || shade || transparent || texture){
                        gImage.fill(ellipse2);
                    }
                    else{
                        gImage.draw(ellipse2);
                    }

                    gImage.setPaint(paint);
                    gImage.setComposite(composite);
                }

                if(solid){
                    gImage.setPaint(color);
                }

                if(shade){
                    gImage.setPaint(
                    new GradientPaint(
                        tempStart.x, tempStart.y, color,
                        tempEnd.x, tempEnd.y, Color.black));
                }

                if(texture){
                    Rectangle2D.Double anchor = 
                    new Rectangle2D.Double(0,0,tileImage.getWidth(),      
                    tileImage.getHeight());

                    TexturePaint texturePaint = 
                        new TexturePaint(tileImage,anchor);
        
                    gImage.setPaint(texturePaint);
                }

                if(transparent){
                    gImage.setComposite(AlphaComposite.getInstance   
                    (AlphaComposite.SRC_OVER,0.3f));
                }

                if(solid || shade || transparent || texture){
                    gImage.fill(ellipse);
                }
                else{
                    gImage.draw(ellipse);
                }

                if(transparent){
                    gImage.setComposite(composite);
                }
            }

            if(rectangle && width != 0 && height != 0){

                Rectangle2D.Double rectangle = 
                    new Rectangle2D.Double(tempStart.x, tempStart.y, 
                    width, height);

                if(shadow){
                    paint = gImage.getPaint();
                    composite = gImage.getComposite();

                    gImage.setPaint(Color.black);
                    gImage.setComposite(AlphaComposite.getInstance
                        (AlphaComposite.SRC_OVER, 0.3f));

                    Rectangle2D.Double rectangle2 = 
                        new Rectangle2D.Double(tempStart.x + 9, 
                        tempStart.y + 9, width, height);

                    if(solid || shade || transparent || texture){
                        gImage.fill(rectangle2);
                    }
                    else{
                        gImage.draw(rectangle2);
                    }

                    gImage.setPaint(paint);
                    gImage.setComposite(composite);
                }

                if(solid){
                    gImage.setPaint(color);
                }

                if(shade){
                    gImage.setPaint(
                        new GradientPaint(
                        tempStart.x, tempStart.y, color,
                        tempEnd.x, tempEnd.y, Color.black));
                     }

                if(transparent){
                    gImage.setComposite(AlphaComposite.getInstance
                    (AlphaComposite.SRC_OVER,0.3f));
                }

                if(texture){
                    Rectangle2D.Double anchor = 
                        new Rectangle2D.Double(0,0,
                        tileImage.getWidth(), tileImage.getHeight());
                    TexturePaint texturePaint = 
                        new TexturePaint(tileImage,anchor);
        
                    gImage.setPaint(texturePaint);
                }

                if(solid || shade || texture || transparent){
                    gImage.fill(rectangle);
                }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -