最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)的簡單畫圖板示例

 更新時間:2018年08月24日 10:52:57   作者:SX_csu2016sw  
這篇文章主要介紹了Java實現(xiàn)的簡單畫圖板,涉及java使用swing組件進行圖形繪制相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了Java實現(xiàn)的簡單畫圖板。分享給大家供大家參考,具體如下:

這個畫圖板是我好久之前做的,之后浙大的同學需要做課設然后就花了一點時間將它改了一下,變得簡單些能夠方便擴充功能,同時學習java基礎(chǔ)

先截圖一下吧,就可以知道有哪些功能了~

三個分區(qū),上面選擇圖形,下面選擇顏色,立體圓就是一個分形,也先放著不需要的同學可以注釋了它

代碼很簡單,就是JPanel進行分區(qū),得到畫筆,同時使用畫圖的函數(shù)就可以做到了

貼代碼應該很快就會了~

主類

package awtDemo;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class DrawMain extends JPanel {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        DrawMain Draw = new DrawMain();
        Draw.InitUI();
    }
    public void InitUI() {
        JFrame jf = new JFrame();
        jf.setSize(1000, 780);
        jf.setTitle("簡單畫板");
        jf.setDefaultCloseOperation(3);
        jf.setLocationRelativeTo(null);
        jf.setLayout(new BorderLayout());
        // 實例化事件監(jiān)聽類
        DrawListener dl = new DrawListener(this);
        // 實現(xiàn)中間面板
        this.setBackground(Color.WHITE);
        jf.add(this, BorderLayout.CENTER);
        // 實現(xiàn)性狀面板
        JPanel ShapePanel = new JPanel();
        ShapePanel.setBackground(Color.black);
        ShapePanel.setLayout(new FlowLayout(FlowLayout.CENTER));
        ShapePanel.setBackground(Color.gray);
        ;
        String[] Shape = { "直線", "曲線", "圓", "噴槍", "橡皮擦", "矩形", "橢圓", "圓角矩形",
                "弧線", "多邊形", "圖形", "三角形", "立體圓", };
        for (int i = 0; i < Shape.length; i++) {
            JButton button = new JButton(Shape[i]);
            button.setBackground(Color.WHITE);
            button.addActionListener(dl); // 添加事件監(jiān)聽機制
            ShapePanel.add(button);
        }
        jf.add(ShapePanel, BorderLayout.NORTH);
        // 實現(xiàn)顏色面板
        JPanel ColorPanel = new JPanel();
        ColorPanel.setBackground(Color.black);
        ColorPanel.setLayout(new FlowLayout(FlowLayout.CENTER));
        ColorPanel.setBackground(Color.gray);
        ;
        Color[] color = { Color.BLACK, Color.blue, Color.white, Color.gray,
                Color.red, Color.CYAN, Color.green, Color.darkGray, Color.pink };
        for (int i = 0; i < color.length; i++) {
            JButton button = new JButton();
            button.addActionListener(dl); // 添加事件監(jiān)聽機制
            button.setPreferredSize(new Dimension(30, 30));
            button.setBackground(color[i]);
            ColorPanel.add(button);
        }
        jf.add(ColorPanel, BorderLayout.SOUTH);
        jf.setVisible(true);
        this.addMouseListener(dl);
        this.addMouseMotionListener(dl);
    }
}

監(jiān)聽輔助類

package awtDemo;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Random;
import javax.swing.JButton;
public class DrawListener extends MouseAdapter implements ActionListener {
    private int x1, y1, x2, y2;
    private int newx1, newy1, newx2, newy2;
    private Graphics2D g;
    private DrawMain df;
    private boolean flag = false;
    String shape = "直線";
    Color color;
    private int[] arrx = new int[4];
    private int[] arry = new int[4];
    private int temp = 0;
    DrawListener(DrawMain d) {
        df = d;
    }
    // 獲取形狀和顏色
    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals("")) {
            JButton button = (JButton) e.getSource();
            color = button.getBackground();
            System.out.println("color = " + color);
        } else {
            JButton button = (JButton) e.getSource();
            shape = button.getActionCommand();
            System.out.println("String = " + shape);
        }
    }
    // 實現(xiàn)畫筆
    public void mousePressed(MouseEvent e) {
        g = (Graphics2D) df.getGraphics();
        g.setColor(color);
        x1 = e.getX();
        y1 = e.getY();
    }
    public void mouseReleased(MouseEvent e) {
        x2 = e.getX();
        y2 = e.getY();
        if (shape.equals("直線")) {
            g.drawLine(x1, y1, x2, y2);
        } else if (shape.equals("弧線")) {
            g.drawArc(x1, y1, Math.abs(x2 - x1), Math.abs(y2 - y1), 0, 180);
        } else if (shape.equals("多邊形") && !flag) {
            g.drawLine(x1, y1, x2, y2);
            newx1 = x1;
            newy1 = y1;
            newx2 = x2;
            newy2 = y2;
            flag = true;
        } else if (shape.equals("圓")) {
            g.drawOval(x1, y1, Math.abs(x2 - x1), Math.abs(y2 - y1));
        } else if (shape.equals("矩形")) {
            g.drawRect(x1, y1, Math.abs(x2 - x1), Math.abs(y2 - y1));
        } else if (shape.equals("圓角矩形")) {
            g.drawRoundRect(x1, y1, Math.abs(x2 - x1), Math.abs(y2 - y1), 2, 10);
        } else if (shape.equals("橢圓")) {
            g.drawOval(x1, y1, Math.abs(x2 - x1), Math.abs(y2 - y1));
        }
    }
    public void mouseClicked(MouseEvent e) {
        if (shape.equals("多邊形") && flag) {
            x2 = e.getX();
            y2 = e.getY();
            if (e.getClickCount() == 2) {
                g.drawLine(newx1, newy1, newx2, newy2);
                flag = false;
            }
            g.drawLine(newx2, newy2, x2, y2);
            newx2 = x2;
            newy2 = y2;
        } else if (shape.equals("圖形")) {
            arrx[temp] = e.getX();
            arry[temp] = e.getY();
            temp++;
            if (temp == 4) {
                int x = arrx[3];
                int y = arry[3];
                for (int i = 0; i <= 10000; i++) {
                    Random ran = new Random();
                    int k = ran.nextInt(3);
                    x = (x + arrx[k]) / 2;
                    y = (y + arry[k]) / 2;
                    g.drawLine(x, y, x, y);
                }
                temp = 0;
            }
        } else if (shape.equals("立體圓")) {
            // double a=-2,b=-2,c=-1.2,d=2;
            double a = 1.40, b = 1.56, c = 1.40, d = -6.56;
            double x = 0, xo = 0;
            double y = 0, yo = 0;
            Color[] Col = { Color.BLUE, Color.cyan, Color.green, Color.magenta,
                    Color.red, Color.yellow };
            for (int i = 0; i <= 90000; i++) {
                Random r = new Random(); // 增加顏色
                int R = r.nextInt(Col.length);
                g.setColor(Col[R]);
                // x=Math.sin(a*yo)-Math.cos(b*xo);
                // y=Math.sin(c*xo)-Math.cos(d*yo);
                x = d * Math.sin(a * xo) - Math.sin(b * yo);
                y = c * Math.cos(a * xo) + Math.cos(b * yo);
                int temp_x = (int) (x * 50);
                int temp_y = (int) (y * 50);
                g.drawLine(temp_x + 500, temp_y + 300, temp_x + 500,
                        temp_y + 300);
                xo = x;
                yo = y;
            }
        } else if (shape.equals("三角形")) {
            double a = -2, b = -2, c = -1.2, d = 2;
            double x = 0, xo = 0;
            double y = 0, yo = 0;
            Color[] Col = { Color.BLUE, Color.cyan, Color.green, Color.magenta,
                    Color.red, Color.yellow };
            for (int i = 0; i <= 90000; i++) {
                Random r = new Random(); // 增加顏色
                int R = r.nextInt(Col.length);
                g.setColor(Col[R]);
                x = Math.sin(a * yo) - Math.cos(b * xo);
                y = Math.sin(c * xo) - Math.cos(d * yo);
                int temp_x = (int) (x * 50);
                int temp_y = (int) (y * 50);
                g.drawLine(temp_x + 500, temp_y + 300, temp_x + 500,
                        temp_y + 300);
                xo = x;
                yo = y;
            }
        }
    }
    public void mouseDragged(MouseEvent e) {
        x2 = e.getX();
        y2 = e.getY();
        if (shape.equals("曲線")) {
            // g.setStroke(new BasicStroke(10));
            // g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            // RenderingHints.VALUE_ANTIALIAS_ON);
            g.drawLine(x1, y1, x2, y2);
            x1 = x2;
            y1 = y2;
        } else if (shape.equals("橡皮擦")) {
            g.setStroke(new BasicStroke(80));
            g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                    RenderingHints.VALUE_ANTIALIAS_ON);
            g.setColor(Color.WHITE);
            g.drawLine(x1, y1, x2, y2);
            x1 = x2;
            y1 = y2;
        } else if (shape.equals("噴槍")) {
            // g.setStroke(new BasicStroke(2)); //不用加粗
            // g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            // RenderingHints.VALUE_ANTIALIAS_ON);
            for (int k = 0; k < 20; k++) {
                Random i = new Random();
                int a = i.nextInt(8);
                int b = i.nextInt(10);
                g.drawLine(x2 + a, y2 + b, x2 + a, y2 + b);
            }
        }
    }
}

代碼量也還是挺小的,因為是簡單畫板嘛~~

更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java字符與字符串操作技巧總結(jié)》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設計有所幫助。

相關(guān)文章

  • spring boot使用i18n時properties文件中文亂碼問題的解決方法

    spring boot使用i18n時properties文件中文亂碼問題的解決方法

    這篇文章主要介紹了spring boot使用i18n時properties文件中文亂碼問題的解決方法,需要的朋友可以參考下
    2017-11-11
  • Java計算球從100米高度自由落下問題

    Java計算球從100米高度自由落下問題

    這篇文章主要介紹了Java球從100米高度自由落下問題,需要的朋友可以參考下
    2017-02-02
  • 詳解Java的Enum的使用與分析

    詳解Java的Enum的使用與分析

    這篇文章主要介紹了詳解Java的Enum的使用與分析的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • SpringBoot整合ActiveMQ過程解析

    SpringBoot整合ActiveMQ過程解析

    這篇文章主要介紹了SpringBoot整合ActiveMQ過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • 如何通過一張圖搞懂springBoot自動注入原理

    如何通過一張圖搞懂springBoot自動注入原理

    這篇文章主要給大家介紹了關(guān)于如何通過一張圖搞懂springBoot自動注入原理的相關(guān)資料,文中通過圖文以及實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-02-02
  • Javaweb基礎(chǔ)入門HTML之table與form

    Javaweb基礎(chǔ)入門HTML之table與form

    HTML的全稱為超文本標記語言,是一種標記語言。它包括一系列標簽.通過這些標簽可以將網(wǎng)絡上的文檔格式統(tǒng)一,使分散的Internet資源連接為一個邏輯整體。HTML文本是由HTML命令組成的描述性文本,HTML命令可以說明文字,圖形、動畫、聲音、表格、鏈接等
    2022-03-03
  • 使用java的milo框架訪問OPCUA服務的過程

    使用java的milo框架訪問OPCUA服務的過程

    這篇文章主要介紹了使用java的milo框架訪問OPCUA服務的方法,本次采用KEPServerEX5模擬服務端,使用milo開發(fā)的程序作為客戶端,具體操作使用過程跟隨小編一起看看吧
    2022-01-01
  • Java二維數(shù)組講解

    Java二維數(shù)組講解

    這篇文章主要詳細介紹了Java二維數(shù)組,文中有詳細的相關(guān)資料講解,感興趣的朋友可以參考一下
    2023-04-04
  • Lombok中@EqualsAndHashCode注解的使用及說明

    Lombok中@EqualsAndHashCode注解的使用及說明

    這篇文章主要介紹了Lombok中@EqualsAndHashCode注解的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Spring Boot 2.4新特性減少95%內(nèi)存占用問題

    Spring Boot 2.4新特性減少95%內(nèi)存占用問題

    這篇文章主要介紹了Spring Boot 2.4新特性減少95%內(nèi)存占用問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12

最新評論

太仆寺旗| 招远市| 弥勒县| 垫江县| 江门市| 依兰县| 达孜县| 天津市| 克什克腾旗| 阆中市| 新营市| 平谷区| 鄂托克旗| 镇平县| 天门市| 隆安县| 永平县| 昌都县| 甘洛县| 马尔康县| 江孜县| 塔河县| 东光县| 达日县| 墨脱县| 张家口市| 怀宁县| 苗栗县| 隆子县| 博湖县| 湘潭市| 平乡县| 温宿县| 大渡口区| 将乐县| 兰坪| 石阡县| 厦门市| 九龙县| 永康市| 绥宁县|