JDK的安裝和環境變數配置(Win10,圖文詳解)
- 作業系統
- JDK的安裝
- JDK下載
- 系統環境變數配置
- 驗證JDK和環境變數配置
- Eclipse安裝
- Java小白入門專案代碼參考
- 結語
作業系統
Win10,64位作業系統
JDK的安裝
如何下載和安裝JDK,配置系統的環境變數,
JDK下載
登錄www.oracle.com下載
甲骨文官網:https://www.oracle.com/cn/index.html
甲骨文官網→資源→軟體下載→Java→面向開發人員的 Java (JDK)
→ JDK Download(這里是Java SE 15為例,可下最新版)
→下載Windows x64 Installer(找到自己對應作業系統的,本文win10,64位為例,點擊jdk-15.0.1_windows-x64_bin.exe)
→下載好jdk-15.0.1_windows-x64_bin.exe后點擊啟動
→無腦安裝,默認設定,(小白沒必要可以不改默認安裝路徑)安裝完畢關閉即可
1.甲骨文官網→資源
2.軟體下載

3.Java

4.面向開發人員的 Java (JDK)

- JDK Download(這里是Java SE 15為例,可下最新版,最新版向下兼容,往下拉有更低的版本,有后面用到的JDK8版本)

6.下載Windows x64 Installer(找到自己對應作業系統的,本文win10,64位為例,點擊jdk-15.0.1_windows-x64_bin.exe),現在一般都是Window的64位作業系統,詳細看自己電腦屬性,

7.下載好jdk-15.0.1_windows-x64_bin.exe后點擊啟動,下載好后去自己瀏覽器的下載找到已經下載好的jdk,點擊安裝就行了,默認設定,

8.無腦安裝,默認設定,(小白沒必要的話建議不改默認安裝路徑)安裝完畢關閉即可,最好使用默認路徑,后邊系統環境變數要用,不推薦改,安裝完點關閉就可以了


系統環境變數配置
1.找到環境變數:
檔案→此電腦→右鍵打開屬性→高級系統設定→環境變數
(實在找不到,直接在win10的搜索框搜索)



1.配置JAVA_HOME環境變數
-
點擊下面系統變數的新建(不是用戶變數!)
-
變數名填 JAVA_HOME
-
變數值填C:\ProgramFiles\Java\jdk-15.0.1
(注意:這是我的jdk版本,你要選著自己的jdk安裝路徑,如果上面是安裝默認的話,去C盤,ProgramFiles,Java,里面的你自己的jdk安裝路徑,也可以點瀏覽目錄,選擇jdk檔案夾確定就行了,)
點擊確定,


2.配置Path環境變數
- 在系統變數找到Path
- 雙擊Path
- 進去后點擊右上角的新建
- 在輸入框中輸入%JAVA_HOME%\bin
- 再次點擊新建,輸入%JAVA_HOME%\jre\bin
- 點確認
在系統變數找到Path,雙擊Path

3.進去后點擊右上角的新建

4.在輸入框中輸入%JAVA_HOME%\bin
輸入完記得點確定

5.再次點擊新建(也可以重新雙擊Path),輸入%JAVA_HOME%\jre\bin
點確定

3.配置CLASSPATH環境變數
- 打開環境變數,點擊下面系統變數的新建(不是用戶變數!)
- 變數名填CLASSPATH
- 變數值填
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;
4.注意.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;這段變數值前面是有一個小點符號“.”和一個分號的“;” 不要漏掉,記得點確認,就配置好了,

配置好后出現變數和值

驗證JDK和環境變數配置
- 使用快捷鍵win+R打開視窗,輸入cmd命令,按Enter鍵進入cmd命令列視窗,

2.輸入java命令,按Enter執行,

出現這些java使用說明,那么你的環境變數就配置成功了,
3.輸入javac命令,按Enter執行,

環境變數配置成功,
下面展示一些 行內代碼片,
Eclipse安裝
配置好環境變數后,直接下載Eclipse安裝包,默認設定安裝即可,
eclipse-java-2020-09-R-win32-x86_64
這里不詳細介紹,可以自行百度一下,
Java小白入門專案代碼參考
一起畫一畫入門實戰代碼參考
javax.swing.JFrame類
package com.mr.draw;
import javax.swing.JFrame;//引入視窗類,如果不含類,先把module-info.java刪掉
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;//子類具有可訪問影像資料緩沖區的image
import java.awt.event.MouseAdapter;//滑鼠監聽事件
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;//空類
import java.awt.BorderLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;
import java.awt.BasicStroke;//按鈕
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JColorChooser;//顏色
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import com.mr.util.FrameGetShape;
import com.mr.util.ShapeWindow;
import com.mr.util.Shapes;
import com.mr.util.DrawImageUtil;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import java.awt.AlphaComposite;
import java.awt.Font;
import javax.swing.JOptionPane;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;//常用
import java.awt.Cursor;
public class DrawPictureFrame extends JFrame implements FrameGetShape { // 繼承視窗類
// 創建一個8位BGR顏色分量影像
BufferedImage image = new BufferedImage(570, 390, BufferedImage.TYPE_INT_BGR);
Graphics gs = image.getGraphics();// 獲得影像的繪制物件
Graphics2D g = (Graphics2D) gs;// 將繪圖物件轉換成Graphics2D型別
DrawPictureCanvas canvas = new DrawPictureCanvas();// 創建畫布物件
Color foreColor = Color.BLACK;// 定義前景色
Color backgroundColor = Color.WHITE;// 定義背景色
int x = -1; // 上一次滑鼠繪制點的橫坐標
int y = -1; // 上一次滑鼠繪制點的縱坐標
boolean rubber = false; // 橡皮標識變數
private JToolBar toolBar;// 工具列
private JButton eraserButton;// 橡皮按鈕
private JToggleButton strokeButton1;// 細線按鈕
private JToggleButton strokeButton2;// 粗線按鈕
private JToggleButton strokeButton3;// 較粗按鈕
private JButton backgroundButton;// 背景色按鈕
private JButton foregroundButton;// 前景色按鈕
private JButton clearButton;// 清除按鈕
private JButton saveButton;// 保存按鈕
private JButton shapeButton;// 圖形按鈕
boolean drawShape = false;
Shapes shape;
private JMenuItem strokeMenuItem1;// 細線選單
private JMenuItem strokeMenuItem2;// 粗線選單
private JMenuItem strokeMenuItem3;// 較粗選單
private JMenuItem clearMenuItem;// 清除選單
private JMenuItem foregroundMenuItem;// 前景色選單
private JMenuItem backgroundMenuItem;// 背景色選單
private JMenuItem eraserMenuItem;// 橡皮選單
private JMenuItem exitMenuItem;// 退出選單
private JMenuItem saveMenuItem;// 保存選單
private JMenuItem shuiyinMenuItem;// 水印 選單
private String shuiyin = "";// 水印字符內容
private PictureWindow picWindow;// 簡筆畫展示表單
private JButton showPicButton;// 展開簡筆畫按鈕
public DrawPictureFrame() { // 構造組件初始化方法
setResizable(false);// 表單大小不變
setTitle("畫圖程式(水印內容:[" + shuiyin + "])");// 標題
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 表單關閉則停止程式
setBounds(500, 100, 574, 460);// 設定視窗位置和寬高
init();// 組件初始化
addListener();// 添加組件監聽
}// DrawPictureFrame()結束
private void init() {
g.setColor(backgroundColor); // 用背景色設定繪圖物件的顏色
g.fillRect(0, 0, 570, 390); // 用背景色填充整個畫布
g.setColor(foreColor); // 用前景色設定繪圖物件的顏色
canvas.setImage(image); // 設定畫布的影像
getContentPane().add(canvas);
toolBar = new JToolBar();// 初始化工具列
getContentPane().add(toolBar, BorderLayout.NORTH);// 工具列添加到表單最北位置
showPicButton = new JButton("展開簡筆畫");// 初始化按鈕物件,并添加文本內容
toolBar.add(showPicButton);// 工具列添加按鈕
saveButton = new JButton("保存");// 初始化按鈕物件,并添加文本內容
toolBar.add(saveButton);// 工具列添加按鈕
toolBar.addSeparator();// 添加分割條
// 初始化有選中狀態的按鈕物件,并添加文本內容
strokeButton1 = new JToggleButton("細線");
strokeButton1.setSelected(true);// 細線按鈕處于被選中狀態
toolBar.add(strokeButton1);// 工具列添加按鈕
// 初始化有選中狀態的按鈕物件,并添加文本內容
strokeButton2 = new JToggleButton("粗線");
toolBar.add(strokeButton2);// 工具列添加按鈕
// 初始化有選中狀態的按鈕物件,并添加文本內容
strokeButton3 = new JToggleButton("較粗");
// 畫筆粗細按鈕組,保證同時只有一個按鈕被選中
ButtonGroup strokeGroup = new ButtonGroup();
strokeGroup.add(strokeButton1);// 按鈕組添加按鈕
strokeGroup.add(strokeButton2);// 按鈕組添加按鈕
strokeGroup.add(strokeButton3);// 按鈕組添加按鈕
toolBar.add(strokeButton3);// 工具列添加按鈕
toolBar.addSeparator();// 添加分割
backgroundButton = new JButton("背景顏色");// 初始化按鈕物件,并添加文本內容
toolBar.add(backgroundButton);// 工具列添加按鈕
foregroundButton = new JButton("前景顏色");// 初始化按鈕物件,并添加文本內容
toolBar.add(foregroundButton);// 工具列添加按鈕
toolBar.addSeparator();// 添加分割條
shapeButton = new JButton("圖形");
toolBar.add(shapeButton);
clearButton = new JButton("清 除");// 初始化按鈕物件,并添加文本內容
toolBar.add(clearButton);// 工具列添加按鈕
eraserButton = new JButton("橡皮");// 初始化按鈕物件,并添加文本內容
toolBar.add(eraserButton);// 工具列添加按鈕
JMenuBar menuBar = new JMenuBar();// 創建選單欄
setJMenuBar(menuBar);// 表單載入選單欄
JMenu systemMenu = new JMenu("系統");// 初始化選單物件,并添加文本內容
menuBar.add(systemMenu);// 選單欄添加選單物件
shuiyinMenuItem = new JMenuItem("設定水印");// 初始化選單項物件,并添加文本內容
systemMenu.add(shuiyinMenuItem);// 選單添加選單項
saveMenuItem = new JMenuItem("保存");// 初始化選單項物件,并添加文本內容
systemMenu.add(saveMenuItem);// 選單添加選單項
systemMenu.addSeparator();// 添加分割條
exitMenuItem = new JMenuItem("退出");// 初始化選單項物件,并添加文本內容
systemMenu.add(exitMenuItem);// 選單添加選單項
JMenu strokeMenu = new JMenu("線型");// 初始化選單物件,并添加文本內容
menuBar.add(strokeMenu);// 選單欄添加選單物件
strokeMenuItem1 = new JMenuItem("細線");// 初始化選單項物件,并添加文本內容
strokeMenu.add(strokeMenuItem1);// 選單添加選單項
strokeMenuItem2 = new JMenuItem("粗線");// 初始化選單項物件,并添加文本內容
strokeMenu.add(strokeMenuItem2);// 選單添加選單項
strokeMenuItem3 = new JMenuItem("較粗");// 初始化選單項物件,并添加文本內容
strokeMenu.add(strokeMenuItem3);// 選單添加選單項
JMenu colorMenu = new JMenu("顏色");// 初始化選單物件,并添加文本內容
menuBar.add(colorMenu);// 選單欄添加選單物件
foregroundMenuItem = new JMenuItem("前景顏色");// 初始化選單項物件,并添加文本內容
colorMenu.add(foregroundMenuItem);// 選單添加選單項
backgroundMenuItem = new JMenuItem("背景顏色");// 初始化選單項物件,并添加文本內容
colorMenu.add(backgroundMenuItem);// 選單添加選單項
JMenu editMenu = new JMenu("編輯");// 初始化選單物件,并添加文本內容
menuBar.add(editMenu);// 選單欄添加選單物件
clearMenuItem = new JMenuItem("清除");// 初始化選單項物件,并添加文本內容
editMenu.add(clearMenuItem);// 選單添加選單項
eraserMenuItem = new JMenuItem("橡皮");// 初始化選單項物件,并添加文本內容
editMenu.add(eraserMenuItem);// 選單添加選單項
// 創建簡筆畫展示面板,并將本類當作它的父表單
picWindow = new PictureWindow(DrawPictureFrame.this);
}
private void addListener() {
// 畫板添加滑鼠移動事件監聽
canvas.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(final MouseEvent e) {// 當滑鼠拖曳時
if (x > 0 && y > 0) {// 如果x和y存在滑鼠記錄
if (rubber) {// 橡皮標識為true,表示使用橡皮
g.setColor(backgroundColor); // 繪圖工具使用背景色
g.fillRect(x, y, 10, 10); // 在滑鼠劃過的位置畫填充的正方型
} else { // 如果橡皮標識為false,表示用畫筆畫圖
g.drawLine(x, y, e.getX(), e.getY());// 在鼠滑過的位置畫直線
} // else結束
} // if結束
x = e.getX(); // 上一次滑鼠繪制點的橫坐標
y = e.getY(); // 上一次滑鼠繪制點的縱坐標
canvas.repaint(); // 更新畫布
}// mouseDragged()結束
public void mouseMoved(final MouseEvent arg0) {// 當滑鼠移動時
if (rubber) {// 如果使用橡皮
// 設定滑鼠指標的形狀為圖片
Toolkit kit = Toolkit.getDefaultToolkit();// 獲得系統默認的組件工具包
// 利用工具包獲取圖片
Image img = kit.createImage("src/img/icon/滑鼠橡皮.png");
// 利用工具包創建一個自定義的游標物件
// 引數為圖片,游標熱點(寫成0,0就行)和游標描述字串
Cursor c = kit.createCustomCursor(img, new Point(0, 0), "clear");
setCursor(c);// 使用自定義的游標
} else {
// 設定滑鼠指標的形狀為十字游標
setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
} // else結束
}// mouseMoved()結束
});// canvas.addMouseMotionListener()結束
canvas.addMouseListener(new MouseAdapter() {// 畫板添加滑鼠單擊事件監聽
public void mouseReleased(final MouseEvent arg0) {// 當按鍵抬起時
x = -1; // 將記錄上一次滑鼠繪制點的橫坐標恢復成-1
y = -1; // 將記錄上一次滑鼠繪制點的縱坐標恢復成-1
}// mouseReleased()結束
public void mousePressed(MouseEvent e) {// 當按鍵按下時
if (drawShape) {// 如果此時滑鼠畫的是圖形
switch (shape.getType()) {// 判斷圖形的種類
case Shapes.YUAN:// 如果是圓形
// 計算坐標,讓滑鼠處于圖形的中心位置
int yuanX = e.getX() - shape.getWidth() / 2;
int yuanY = e.getY() - shape.getHeigth() / 2;
// 創建圓形圖形,并指定坐標和寬高
Ellipse2D yuan = new Ellipse2D.Double(yuanX, yuanY, shape.getWidth(), shape.getHeigth());
g.draw(yuan);// 畫圖工具畫此圓形
break;// 結束switch陳述句
case Shapes.FANG:// 如果是方形
// 計算坐標,讓滑鼠處于圖形的中心位置
int fangX = e.getX() - shape.getWidth() / 2;
int fangY = e.getY() - shape.getHeigth() / 2;
// 創建方形圖形,并指定坐標和寬高
Rectangle2D fang = new Rectangle2D.Double(fangX, fangY, shape.getWidth(), shape.getHeigth());
g.draw(fang);// 畫圖工具畫此方形
break;// 結束switch陳述句
}// switch結束
canvas.repaint(); // 更新畫布
drawShape = false;
} // if結束
}// mousePressed()結束
});// canvas.addMouseListener()結束
toolBar.addMouseMotionListener(new MouseMotionAdapter() {// 工具列添加滑鼠移動監聽
public void mouseMoved(final MouseEvent arg0) {// 當滑鼠移動時
// 設定滑鼠指標的形狀為默認游標
setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
}// mouseMoved()
});// toolBar.addMouseMotionListener()結束
strokeButton1.addActionListener(new ActionListener() {// “細線”按鈕添加動作監聽
public void actionPerformed(final ActionEvent arg0) {// 單擊時
// 宣告畫筆的屬性,粗細為1像素,線條末端無修飾,折線處呈尖角
BasicStroke bs = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);
g.setStroke(bs); // 畫圖工具使用此畫筆
}// actionPerformed()結束
});// strokeButton1.addActionListener()結束
strokeButton2.addActionListener(new ActionListener() {// “粗線”按鈕添加動作監聽
public void actionPerformed(final ActionEvent arg0) {
// 宣告畫筆的屬性,粗細為2像素,線條末端無修飾,折線處呈尖角
BasicStroke bs = new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);
g.setStroke(bs); // 畫圖工具使用此畫筆
}// actionPerformed()結束
});// strokeButton2.addActionListener()結束
strokeButton3.addActionListener(new ActionListener() {// “較粗”按鈕添加動作監聽
public void actionPerformed(final ActionEvent arg0) {
// 宣告畫筆的屬性,粗細為4像素,線條末端無修飾,折線處呈尖角
BasicStroke bs = new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);
g.setStroke(bs); // 畫圖工具使用此畫筆
}// actionPerformed()結束
});// strokeButton3.addActionListener()結束
backgroundButton.addActionListener(new ActionListener() {// 背景顏色按鈕添加動作監聽
public void actionPerformed(final ActionEvent arg0) {// 單擊時
// 打開選擇顏色對話框,引數依次為:父表單、標題、默認選中的顏色(青色)
Color bgColor = JColorChooser.showDialog(DrawPictureFrame.this, "選擇顏色對話框", Color.CYAN);
if (bgColor != null) {// 如果選中的顏色不是空的
backgroundColor = bgColor;// 將選中的顏色賦給背景色變數
}
// 背景色按鈕的也更換為這種背景顏色
backgroundButton.setBackground(backgroundColor);
g.setColor(backgroundColor); // 繪圖工具使用背景色
g.fillRect(0, 0, 570, 390); // 畫一個背景顏色的方形填滿整個畫布
g.setColor(foreColor); // 繪圖工具使用前景色
canvas.repaint(); // 更新畫布
}// actionPerformed()結束
});// backgroundButton.addActionListener()結束
foregroundButton.addActionListener(new ActionListener() {// 前景色顏色按鈕添加動作監聽
public void actionPerformed(final ActionEvent arg0) {// 單擊時
// 打開選擇顏色對話框,引數依次為:父表單、標題、默認選中的顏色(青色)
Color fColor = JColorChooser.showDialog(DrawPictureFrame.this, "選擇顏色對話框", Color.CYAN);
if (fColor != null) {// 如果選中的顏色不是空的
foreColor = fColor;// 將選中的顏色賦給前景色變數
}
// 前景色按鈕的文字也更換為這種顏色
foregroundButton.setForeground(foreColor);
g.setColor(foreColor); // 繪圖工具使用前景色
}// actionPerformed()結束
});// foregroundButton.addActionListener()結束
clearButton.addActionListener(new ActionListener() {// 清除按鈕添加動作監聽
public void actionPerformed(final ActionEvent arg0) {// 單擊時
g.setColor(backgroundColor); // 繪圖工具使用背景色
g.fillRect(0, 0, 570, 390); // 畫一個背景顏色的方形填滿整個畫布
g.setColor(foreColor); // 繪圖工具使用前景色
canvas.repaint(); // 更新畫布
}// actionPerformed()結束
});// eraserButton.addActionListener()結束
eraserButton.addActionListener(new ActionListener() {// 橡皮按鈕添加動作監聽
public void actionPerformed(final ActionEvent arg0) {// 單擊時
// 單擊工具列上的橡皮按鈕,使用橡皮
if (eraserButton.getText().equals("橡皮")) {
rubber = true; // 設定橡皮標識為true
eraserButton.setText("畫圖"); // 改變按鈕上顯示的文本為畫圖
} else { // 單擊工具列上的畫圖按鈕,使用畫筆
rubber = false; // 設定橡皮標識為false
eraserButton.setText("橡皮"); // 改變按鈕上顯示的文本為橡皮
g.setColor(foreColor); // 設定繪圖物件的前景色
} // else結束
}// actionPerformed()結束
});// eraserButton.addActionListener()結束
shapeButton.addActionListener(new ActionListener() {// 圖形按鈕添加動作監聽
public void actionPerformed(ActionEvent e) {// 單擊時
// 創建圖形選擇組件
ShapeWindow shapeWindow = new ShapeWindow(DrawPictureFrame.this);
int shapeButtonWidth = shapeButton.getWidth();// 獲取影像按鈕寬度
int shapeWindowWidth = shapeWindow.getWidth();// 獲取圖形按鈕高度
int shapeButtonX = shapeButton.getX();// 獲取圖形按鈕橫坐標
int shapeButtonY = shapeButton.getY();// 獲取圖形按鈕縱坐標
// 計算圖形組件橫坐標,讓組件與“圖形”按鈕居中對齊
int shapeWindowX = getX() + shapeButtonX - (shapeWindowWidth - shapeButtonWidth) / 2;
// 計算圖形組件縱坐標,讓組件顯示在“圖形”按鈕下方
int shapeWindowY = getY() + shapeButtonY + 80;
// 設定圖形組件坐標位置
shapeWindow.setLocation(shapeWindowX, shapeWindowY);
shapeWindow.setVisible(true);// 圖形組件可見
}// actionPerformed()結束
});// shapeButton.addActionListener()結束
saveButton.addActionListener(new ActionListener() {// 保存按鈕添加動作監聽
public void actionPerformed(final ActionEvent arg0) {// 單擊時
addWatermark();// 添加水印
DrawImageUtil.saveImage(DrawPictureFrame.this, image);// 列印圖片
}
});
exitMenuItem.addActionListener(new ActionListener() { // 退出選單欄添加動作監聽
public void actionPerformed(final ActionEvent e) { // 單擊時
System.exit(0); // 程式關閉
}/// actionPerformed()結束
});// exitMenuItem.addActionListener()結束
eraserMenuItem.addActionListener(new ActionListener() { // 橡皮選單欄添加動作監聽
public void actionPerformed(final ActionEvent e) { // 單擊時
if (eraserMenuItem.getText().equals("橡皮")) { // 如果選單的文字內容為“橡皮”
rubber = true; // 設定橡皮標識為true
eraserMenuItem.setText("畫圖"); // 改變選單上顯示的文本為畫圖
eraserButton.setText("畫圖"); // 改變按鈕上顯示的文本為畫圖
} else { // 單擊工具列上的畫圖按鈕,使用畫筆
rubber = false; // 設定橡皮標識為false
eraserMenuItem.setText("橡皮"); // 改變選單上顯示的文本為“橡皮”
eraserButton.setText("橡皮"); // 改變按鈕上顯示的文本為“橡皮”
g.setColor(foreColor); // 設定繪圖物件的前景色
} // else結束
}// actionPerformed()結束
});// eraserMenuItem.addActionListener()結束
clearMenuItem.addActionListener(new ActionListener() { // 清除選單添加動作監聽
public void actionPerformed(final ActionEvent e) { // 單擊時
g.setColor(backgroundColor); // 繪圖工具使用背景色
g.fillRect(0, 0, 570, 390); // 畫一個背景顏色的方形填滿整個畫布
g.setColor(foreColor); // 繪圖工具使用前景色
canvas.repaint(); // 更新畫布
}// actionPerformed()結束
});// clearMenuItem.addActionListener()結束
strokeMenuItem1.addActionListener(new ActionListener() {// "細線"選單添加動作監聽
public void actionPerformed(final ActionEvent e) { // 單擊時
// 宣告畫筆的屬性,粗細為1像素,線條末端無修飾,折線處呈尖角
BasicStroke bs = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);
g.setStroke(bs); // 畫圖工具使用此畫筆
strokeButton1.setSelected(true); // "細線"按鈕設為選中狀態
}// actionPerformed()結束
});// strokeMenuItem1.addActionListener()結束
strokeMenuItem2.addActionListener(new ActionListener() {// "粗線"選單添加動作監聽
public void actionPerformed(final ActionEvent e) { // 單擊時
// 宣告畫筆的屬性,粗細為2像素,線條末端無修飾,折線處呈尖角
BasicStroke bs = new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);
g.setStroke(bs); // 畫圖工具使用此畫筆
strokeButton2.setSelected(true); // "粗線"按鈕設為選中狀態
}// actionPerformed()結束
});// strokeMenuItem2.addActionListener()結束
strokeMenuItem3.addActionListener(new ActionListener() {// "較粗"選單添加動作監聽
public void actionPerformed(final ActionEvent e) { // 單擊時
// 宣告畫筆的屬性,粗細為4像素,線條末端無修飾,折線處呈尖角
BasicStroke bs = new BasicStroke(4, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);
g.setStroke(bs); // 畫圖工具使用此畫筆
strokeButton3.setSelected(true); // "較粗"按鈕設為選中狀態
}// actionPerformed()結束
});// strokeMenuItem3.addActionListener()結束
foregroundMenuItem.addActionListener(new ActionListener() {// 前景色選單添加動作監聽
public void actionPerformed(final ActionEvent e) { // 單擊時
// 打開選擇顏色對話框,引數依次為:父表單、標題、默認選中的顏色(青色)
Color fColor = JColorChooser.showDialog(DrawPictureFrame.this, "選擇顏色對話框", Color.CYAN);
if (fColor != null) { // 如果選中的顏色不是空的
foreColor = fColor; // 將選中的顏色賦給前景色變數
} // if結束
foregroundButton.setForeground(foreColor);// 前景色按鈕的文字也更換為這種顏色
g.setColor(foreColor); // 繪圖工具使用前景色
}// actionPerformed()結束
});// foregroundMenuItem.addActionListener()結束
backgroundMenuItem.addActionListener(new ActionListener() {// 背景色選單添加動作監聽
public void actionPerformed(final ActionEvent e) { // 單擊時
// 打開選擇顏色對話框,引數依次為:父表單、標題、默認選中的顏色(青色)
Color bgColor = JColorChooser.showDialog(DrawPictureFrame.this, "選擇顏色對話框", Color.CYAN);
if (bgColor != null) { // 如果選中的顏色不是空的
backgroundColor = bgColor; // 將選中的顏色賦給背景色變數
} // if結束
// 背景色按鈕更改按鈕自身的背景顏色,其顏色與畫板背景顏色相同
backgroundButton.setBackground(backgroundColor);
g.setColor(backgroundColor); // 繪圖工具使用背景色
g.fillRect(0, 0, 570, 390); // 畫一個背景顏色的方形填滿整個畫布
g.setColor(foreColor); // 繪圖工具使用前景色
canvas.repaint(); // 更新畫布
}// actionPerformed()結束
});// backgroundMenuItem.addActionListener()結束
saveMenuItem.addActionListener(new ActionListener() { // 保存選單添加動作監聽
public void actionPerformed(ActionEvent e) { // 單擊時
addWatermark();// 添加水印
DrawImageUtil.saveImage(DrawPictureFrame.this, image);// 列印圖片
}// actionPerformed()結束
});// saveMenuItem.addActionListener()結束
shuiyinMenuItem.addActionListener(new ActionListener() {// 水印選單項添加動作監聽
public void actionPerformed(ActionEvent e) {// 單擊時
// 彈出輸入對話框
shuiyin = JOptionPane.showInputDialog(DrawPictureFrame.this, "你想添加什么水印?");
if (null == shuiyin) {// 如果輸入對話框回傳的是null
shuiyin = "";// 字串設為空內容
} else {// 如果不是null
setTitle("畫圖程式(水印內容:[ " + shuiyin + " ] )");// 修改表單標題
} // else結束
}// actionPerformed()結束
});// shuiyinMenuItem.addActionListener()結束
showPicButton.addActionListener(new ActionListener() {// 展示簡筆畫按鈕添加動作監聽
public void actionPerformed(ActionEvent e) {// 單擊時
boolean isVisible = picWindow.isVisible();// 獲取簡筆畫展示表單可見狀態
if (isVisible) {// 如果簡筆畫展示表單是可見的
showPicButton.setText("展開簡筆畫");// 修改按鈕的文本
picWindow.setVisible(false);// 隱藏簡筆畫展示表單
} else {// 如果是隱藏的
showPicButton.setText("隱藏簡筆畫");// 修改按鈕的文本
// 重新指定簡筆畫展示表單的顯示位置
// 橫坐標 = 主表單橫坐標 - 簡筆畫表單寬度 - 5
// 縱坐標 = 主表單縱坐標
picWindow.setLocation(getX() - picWindow.getWidth() - 5, getY());
picWindow.setVisible(true);// 簡筆畫展示表單可見
} // else結束
}// actionPerformed()結束
});// showPicButton.addActionListener()結束
}// addListener()結束
/**
* 恢復展開簡筆畫按鈕的文本內容,此方法供簡筆畫面板的“隱藏”按鈕呼叫,
*/
public void initShowPicButton() {
showPicButton.setText("展開簡筆畫");// 修改按鈕的文本
}// initShowPicButton()結束
private void addWatermark() {
if (!"".equals(shuiyin.trim())) {// 如果水印欄位不是空字串
g.rotate(Math.toRadians(-30));// 將圖片旋轉-30弧度
Font font = new Font("楷體", Font.BOLD, 60);// 設定字體
g.setFont(font);// 載入字體
g.setColor(Color.GRAY);// 使用灰色
AlphaComposite alpha = AlphaComposite.SrcOver.derive(0.4f);// 設定透明效果
g.setComposite(alpha);// 使用透明效果
g.drawString(shuiyin, 150, 500);// 繪制文字
canvas.repaint();// 面板重繪
g.rotate(Math.toRadians(30));// 將旋轉的圖片再轉回來
alpha = AlphaComposite.SrcOver.derive(1f);// 不透明效果
g.setComposite(alpha);// 使用不透明效果
g.setColor(foreColor);// 畫筆恢復之前顏色
} // if結束s
}// addWatermark()結束
public void getShape(Shapes shape) {
this.shape = shape;// 將回傳的圖形物件付給類的全域變數
drawShape = true;// 畫圖形標識變數為true,說明現在滑鼠畫的是圖形,而不是線
}// getShape()結束
public static void main(String[] args) {
DrawPictureFrame frame = new DrawPictureFrame();// 創建表單物件
frame.setVisible(true);// 讓表單可見
}// main結束
}// DrawPictureFrame類 結束
DrawPictureCanvas類
package com.mr.draw;
import java.awt.Canvas;//畫板類
import java.awt.Graphics;//繪圖類
import java.awt.Image;//影像類
public class DrawPictureCanvas extends Canvas {
private Image image = null;// 創建畫板中圖片物件
public void setImage(Image image) {
this.image = image;// Ctrl+Shift+S 快捷 Generate Get Set
}
public void paint(Graphics g) { // 重寫 paint方法
g.drawImage(image, 0, 0, null);// 在畫布繪圖
}
public void update(Graphics g) { // 重寫 update方法 解決螢屏閃爍
paint(g);
}
}//DrawPictureCanvas類結束
PictureWindow類
package com.mr.draw;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JWindow;
import com.mr.util.BackgroundPanel;
/**
* 簡筆畫展示表單
*/
public class PictureWindow extends JWindow {
private JButton changeButton;// 更換圖片按鈕
private JButton hiddenButton;// 隱藏按鈕
private BackgroundPanel centerPanel;// 展示圖片的帶背景圖面板
File list[ ];// 圖片檔案陣列
int index;// 當前選中的圖片索引
DrawPictureFrame frame;// 父表單
/**
* 構造方法
*
* @param frame - 父表單
*/
public PictureWindow(DrawPictureFrame frame) {
this.frame = frame;// 構造引數的值賦給父表單
setSize(400, 460);// 設定表單寬高
init();// 初始化表單組件
addListener();// 給組件添加監聽
}// PictureWindow()結束
/**
* 組件初始化方法
*/
private void init() {
Container c = getContentPane();// 獲取表單主容器
File dir = new File("src/img/picture");// 創建簡筆畫素材檔案夾物件
list = dir.listFiles();// 獲取檔案夾里的所有檔案
// 初始化背景面板,使用圖片檔案夾里第一張簡筆畫
centerPanel = new BackgroundPanel(getListImage());
c.add(centerPanel, BorderLayout.CENTER);// 背景面板放到主容器中部
FlowLayout flow = new FlowLayout(FlowLayout.RIGHT);// 創建右對齊的流布局
flow.setHgap(20);// 水平間隔20像素
JPanel southPanel = new JPanel();// 創建南部面板
southPanel.setLayout(flow);// 南部面板使用剛才創建好的流布局
changeButton = new JButton("更換圖片");// 實體化“更換圖片”按鈕
southPanel.add(changeButton);// 南部面板添加按鈕
hiddenButton = new JButton("隱藏");// 實體化“隱藏”按鈕
southPanel.add(hiddenButton);// 南部面板添加按鈕
c.add(southPanel, BorderLayout.SOUTH);// 南部面板放到主容器的南部位置
}// init()結束
/**
* 添加監聽
*/
private void addListener() {
hiddenButton.addActionListener(new ActionListener() {// 隱藏按鈕添加動作監聽
public void actionPerformed(ActionEvent e) {// 單擊時
setVisible(false);// 本表單不可見
frame.initShowPicButton();//父類表單還原簡筆畫按鈕文本
}// actionPerformed();
});// hiddenButton.addActionListener()結束
changeButton.addActionListener(new ActionListener() {// 更換圖片按鈕添加動作監聽
public void actionPerformed(ActionEvent e) {// 單擊時
centerPanel.setImage(getListImage());// 背景面板重新載入圖片
}// actionPerformed();
});// changeButton.addActionListener()結束
}// addListener()
/**
* 獲取圖片檔案夾下的圖片,每次呼叫此方法,都會獲得不同的檔案物件
*
* @return 回傳圖片物件
*/
private Image getListImage() {
String imgPath = list[index].getAbsolutePath();// 獲取當前索引下的圖片檔案路徑
ImageIcon image = new ImageIcon(imgPath);// 獲取此圖片檔案的圖示物件
index++;// 索引變數遞增
if (index >= list.length) {// 如果索引變數超過圖片數量了
index = 0;// 索引變數歸零
} // if結束
return image.getImage();// 獲得圖示物件的圖片物件
}// getListImage()結束
}// PictureWindow類結束
后續將更新,如何將在eclipse中寫的java專案匯出打包成,exe類檔案,在沒有非JVM的環境下執行,直接打包成安裝包,在其它windows電腦安裝運行,
結語
第一次在CSDN寫東西 ,這些也是我自己最近遇到的問題,和一些解決的方法經驗,希望對你們有幫助,也可以記錄自己的一些經驗和成長,
有志者,事竟成,破釜沉舟,百二秦關終屬楚;
有心人,天不負,臥薪嘗膽,三千越甲可吞吳,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/225089.html
標籤:java
上一篇:專案
