第四周

第一天寫了一個繪圖小窗口

  import java.awt.BorderLayout;
  import java.awt.Color;
  import java.awt.Graphics;
  import java.awt.event.MouseAdapter;
  import java.awt.event.MouseEvent;
  import java.awt.image.BufferedImage;
  import java.io.IOException;
  import java.util.ArrayList;
  import java.util.List;
  import javax.imageio.ImageIO;
 import javax.swing.JButton;
  import javax.swing.JColorChooser;
  import javax.swing.JFileChooser;
  import javax.swing.JFrame;
  import javax.swing.JPanel
  import com.huawei.Shape;
  import com.huawei.ShapeFactory;


  @SuppressWarnings("serial")
  public class PaintBrushFrame extends JFrame {
private BufferedImage image = new BufferedImage(666, 666, 1);
private List<Shape> shapesArray = new ArrayList<>();
private String currentType = "線條";
private Color defaultcolor = Color.BLACK;
private int defaultwidth = 9;

public PaintBrushFrame() {
    setTitle("我的繪圖工具");
    setSize(666, 666);
    setResizable(false);
    setLocationRelativeTo(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    JPanel buttonPanel = new JPanel();
    this.add(buttonPanel, BorderLayout.SOUTH);
    String[] buttonNames = { "線條", "矩形", "橢圓", "三角形" };
    for (String name : buttonNames) {
        JButton button = new JButton(name);
        button.addActionListener(e -> {
            currentType = button.getActionCommand();
        });
        buttonPanel.add(button);

    }
    String[] buttonNames2 = { "顏色", "-", "+", "撤銷", "清空", "保存" };
    for (String name : buttonNames2) {
        JButton button = new JButton(name);
        button.addActionListener(e -> {
            String command = e.getActionCommand();
            if (command.equals("顏色")) {

                Color currentColor = JColorChooser.showDialog(PaintBrushFrame.this, "請選擇顏色", defaultcolor);
                defaultcolor = currentColor != null ? currentColor : defaultcolor;
            } else if (command.equals("+")) {
                if (defaultwidth < 23) {
                    defaultwidth++;
                }
            } else if (command.equals("-")) {
                if (defaultwidth > 1) {
                    defaultwidth--;
                }
            } else if (command.equals("撤銷")) {
                if (shapesArray.size() > 0) {
                    shapesArray.remove(shapesArray.size() - 1);
                    repaint();
                }
            } else if (command.equals("清空")) {
                // Java雖然有垃圾回收機(jī)制(Garbage Collection
                // 但如果程序編寫不當(dāng)仍有可能造成內(nèi)存泄漏
                // 垃圾回收是針對內(nèi)存堆空間的無用對象清理工作
                if (!shapesArray.isEmpty()) {
                    shapesArray.clear();
                    repaint();
                }
            }

            else if (command.equals("保存")) {
                JFileChooser chooser = new JFileChooser();
                int choice = chooser.showSaveDialog(PaintBrushFrame.this);
                if (choice == JFileChooser.APPROVE_OPTION) {
                    BufferedImage newimage = new BufferedImage(666, 666, 1);
                    Graphics graphics = newimage.getGraphics();
                    graphics.setColor(Color.WHITE);
                    graphics.fillRect(0, 0, 666, 666);
                    for (Shape shape : shapesArray) {
                        shape.draw(graphics);
                    }
                    try {
                        ImageIO.write(newimage, "PNG", chooser.getSelectedFile());
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }

            }
        });
        buttonPanel.add(button);

    }
    // 缺省適配模式
    // 給窗口或者窗口上的有三種做法
    // 1从诲,創(chuàng)建匿名內(nèi)部類的對象(就地實例化
    // 2.創(chuàng)建一個內(nèi)部類對象來充當(dāng)監(jiān)聽器(它有 名字隨時可以創(chuàng)建對象
    // 3.讓窗口實現(xiàn)接口俺夕,用窗口對象(this充當(dāng)監(jiān)聽器
    // 從Java8開始丹喻,對于但方法接口可以使用Lambda表達(dá)式(λ
    // Lambda表達(dá)式其實就是寫一個匿名方法來編寫事件回調(diào)代碼
    // 創(chuàng)建匿名內(nèi)部類的對象
    // 內(nèi)部類可以直接使用外部類的私有成員(屬性和方法
    MouseAdapter adapter = new MouseAdapter() {

        @Override
        public void mousePressed(MouseEvent e) {
            int x = e.getX();
            int y = e.getY();
            // 用工廠創(chuàng)建對象(跟具體的圖形類型解耦合
            Shape currentShape = ShapeFactory.createShape(currentType);
            currentShape.setColor(defaultcolor);
            currentShape.setLineWidth(defaultwidth);
            currentShape.setStartX(x);
            currentShape.setStartY(y);
            currentShape.setEndX(x);
            currentShape.setEndY(y);
            shapesArray.add(currentShape);

        }

        @Override
        public void mouseDragged(MouseEvent e) {

            Shape currentShape = shapesArray.get(shapesArray.size() - 1);
            int x = e.getX();
            int y = e.getY();
            currentShape.setEndX(x);
            currentShape.setEndY(y);
            repaint();

        }
    };
    this.addMouseListener(adapter);
    this.addMouseMotionListener(adapter);

}

@Override
public void paint(Graphics g) {
    Graphics otherGraphics = image.getGraphics();
    super.paint(otherGraphics);
    for (Shape shape : shapesArray) {
        shape.draw(otherGraphics);
    }
    g.drawImage(image, 0, 0, null);
}

public static void main(String[] args) {
    new PaintBrushFrame().setVisible(true);
}

}

怎么樣去實現(xiàn)圖形的畫法就省略了襟铭,做一個繪圖工具看似簡單碌奉,但是對于現(xiàn)階段的我來說還是相當(dāng)困難的,還是得回去抄抄這個代碼蝌矛,多去理解老師寫代碼的思路道批,練好英語。

第二入撒,三天的集合聽的也是挺懵比的隆豹,集合的用處還是非常大的,List,Set茅逮。還得重寫方法璃赡,真的是爆炸啊。

這個正則表達(dá)式還是非常神奇的献雅,反正不當(dāng)搞得懂碉考,老師都說了,去網(wǎng)上找挺身,不需要自己寫侯谁,只要懂原理就行了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市章钾,隨后出現(xiàn)的幾起案子墙贱,更是在濱河造成了極大的恐慌,老刑警劉巖贱傀,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惨撇,死亡現(xiàn)場離奇詭異,居然都是意外死亡府寒,警方通過查閱死者的電腦和手機(jī)魁衙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來株搔,“玉大人剖淀,你說我怎么就攤上這事∠朔浚” “怎么了纵隔?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長帆卓。 經(jīng)常有香客問我巨朦,道長米丘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任糊啡,我火速辦了婚禮拄查,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棚蓄。我一直安慰自己堕扶,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布梭依。 她就那樣靜靜地躺著稍算,像睡著了一般。 火紅的嫁衣襯著肌膚如雪役拴。 梳的紋絲不亂的頭發(fā)上糊探,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音河闰,去河邊找鬼科平。 笑死,一個胖子當(dāng)著我的面吹牛姜性,可吹牛的內(nèi)容都是我干的瞪慧。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼部念,長吁一口氣:“原來是場噩夢啊……” “哼弃酌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起儡炼,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤妓湘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后射赛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體多柑,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡奶是,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年楣责,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片聂沙。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡秆麸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出及汉,到底是詐尸還是另有隱情沮趣,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布坷随,位于F島的核電站房铭,受9級特大地震影響驻龟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缸匪,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一翁狐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凌蔬,春花似錦露懒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辩诞,卻和暖如春坎弯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背译暂。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工荞怒, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秧秉。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓褐桌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親象迎。 傳聞我的和親對象是個殘疾皇子荧嵌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容