解决方案

JDK安装和环境变量配置(Win10图文详解)

seo靠我 2023-09-23 19:29:11

JDK的安装和环境变量配置(Win10,图文详解)

操作系统JDK的安装JDK下载 系统环境变量配置验证JDK和环境变量配置Eclipse安装Java小白入门项目代码参考结语

操作系统

Win10,64位操SEO靠我作系统

JDK的安装

如何下载和安装JDK,配置系统的环境变量。

JDK下载

登录www.oracle.com下载 甲骨文官网:https://www.oracle.com/cn/index.SEO靠我html

甲骨文官网→资源→软件下载→Java→面向开发人员的 Java (JDK)

→ JDK Download(这里是Java SE 15为例,可下最新版)

→下载Windows x64 InstallSEO靠我er(找到自己对应操作系统的,本文win10,64位为例,点击jdk-15.0.1_windows-x64_bin.exe)

→下载好jdk-15.0.1_windows-x64_bin.exe后点击启SEO靠我

→无脑安装,默认设置,(小白没必要可以不改默认安装路径)安装完毕关闭即可

1.甲骨文官网→资源

2.软件下载

3.Java

4.面向开发人员的 Java (JDK)

JDK Download(这里是Java SEO靠我SE 15为例,可下最新版,最新版向下兼容,往下拉有更低的版本,有后面用到的JDK8版本)

6.下载Windows x64 Installer(找到自己对应操作系统的,本文win10,64位为例,点击jSEO靠我dk-15.0.1_windows-x64_bin.exe),现在一般都是Window的64位操作系统,详细看自己电脑属性。

7.下载好jdk-15.0.1_windows-x64_bin.exe后点击SEO靠我启动,下载好后去自己浏览器的下载找到已经下载好的jdk,点击安装就行了,默认设置。

8.无脑安装,默认设置,(小白没必要的话建议不改默认安装路径)安装完毕关闭即可。最好使用默认路径,后边系统环境变量要用SEO靠我,不推荐改。安装完点关闭就可以了

系统环境变量配置

1.找到环境变量:

文件→此电脑→右键打开属性→高级系统设置→环境变量

(实在找不到,直接在win10的搜索框搜索)

1.配置JAVA_HOME环境变量

点击下SEO靠我面系统变量的新建(不是用户变量!

变量名填 JAVA_HOME

变量值填C:\ProgramFiles\Java\jdk-15.0.1

(注意:这是我的jdk版本,你要选着自己的jdk安装路径,如果上面是SEO靠我安装默认的话,去C盘,ProgramFiles,Java,里面的你自己的jdk安装路径,也可以点浏览目录,选择jdk文件夹确定就行了。)

点击确定。

2.配置Path环境变量

在系统变量找到Path双击PaSEO靠我th进去后点击右上角的新建在输入框中输入%JAVA_HOME%\bin再次点击新建,输入%JAVA_HOME%\jre\bin点确认

在系统变量找到Path,双击Path

3.进去后点击右上角的新建

4.在SEO靠我输入框中输入%JAVA_HOME%\bin

输入完记得点确定

5.再次点击新建(也可以重新双击Path),输入%JAVA_HOME%\jre\bin

点确定

3.配置CLASSPATH环境变量打开环境变量,点SEO靠我击下面系统变量的新建(不是用户变量!

)变量名填CLASSPATH变量值填

.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;

4.注意.;%JAVA_HOME%\liSEO靠我b;%JAVA_HOME%\lib\tools.jar;这段变量值前面是有一个小点符号“.”和一个分号的“;” 不要漏掉。记得点确认,就配置好了。

配置好后出现变量和值

验证JDK和环境变量配置

使用快捷键SEO靠我win+R打开窗口,输入cmd命令,按Enter键进入cmd命令行窗口。

2.输入java命令,按Enter执行。

出现这些java使用说明,那么你的环境变量就配置成功了。

3.输入javac命令,按EntSEO靠我er执行。

环境变量配置成功。

下面展示一些 内联代码片。

Eclipse安装

配置好环境变量后,直接下载Eclipse安装包,默认设置安装即可。 eclipse-java-2020-09-RSEO靠我-win32-x86_64 这里不详细介绍,可以自行百度一下。

Java小白入门项目代码参考

一起画一画入门实战代码参考

javax.swing.JFrame类

package com.mr.SEO靠我draw;import javax.swing.JFrame;//引入窗口类,如果不含类,先把module-info.java删掉 import java.awt.Color; SEO靠我 import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufSEO靠我feredImage;//子类具有可访问图像数据缓冲区的image import java.awt.event.MouseAdapter;//鼠标监听事件 importSEO靠我 java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter;//空类 import javSEO靠我a.awt.BorderLayout; import javax.swing.ButtonGroup; import javax.swing.JButton; SEO靠我 import javax.swing.JToggleButton; import javax.swing.JToolBar; import java.awt.BSEO靠我asicStroke;//按钮 import java.awt.event.ActionEvent; import java.awt.event.ActionListeSEO靠我ner; import javax.swing.JColorChooser;//颜色 import java.awt.geom.Ellipse2D; iSEO靠我mport java.awt.geom.Rectangle2D; import com.mr.util.FrameGetShape; import com.mr.utiSEO靠我l.ShapeWindow; import com.mr.util.Shapes; import com.mr.util.DrawImageUtil; SEO靠我import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem;SEO靠我 import java.awt.AlphaComposite; import java.awt.Font; import javax.swing.JOSEO靠我ptionPane; import java.awt.Image; import java.awt.Point; import java.awt.TooSEO靠我lkit;//常用 import java.awt.Cursor;public class DrawPictureFrame extends JFrame implements FraSEO靠我meGetShape { // 继承窗口类// 创建一个8位BGR颜色分量图像BufferedImage image = new BufferedImage(570, 390, BufferedImaSEO靠我ge.TYPE_INT_BGR);Graphics gs = image.getGraphics();// 获得图像的绘制对象Graphics2D g = (Graphics2D) gs;// 将绘图SEO靠我对象转换成Graphics2D类型DrawPictureCanvas canvas = new DrawPictureCanvas();// 创建画布对象Color foreColor = ColorSEO靠我.BLACK;// 定义前景色Color backgroundColor = Color.WHITE;// 定义背景色int x = -1; // 上一次鼠标绘制点的横坐标int y = -1; //SEO靠我 上一次鼠标绘制点的纵坐标boolean rubber = false; // 橡皮标识变量private JToolBar toolBar;// 工具栏private JButton eraserBSEO靠我utton;// 橡皮按钮private JToggleButton strokeButton1;// 细线按钮private JToggleButton strokeButton2;// 粗线按钮pSEO靠我rivate JToggleButton strokeButton3;// 较粗按钮private JButton backgroundButton;// 背景色按钮private JButton fSEO靠我oregroundButton;// 前景色按钮private JButton clearButton;// 清除按钮private JButton saveButton;// 保存按钮privateSEO靠我 JButton shapeButton;// 图形按钮boolean drawShape = false;Shapes shape;private JMenuItem strokeMenuItem1SEO靠我;// 细线菜单private JMenuItem strokeMenuItem2;// 粗线菜单private JMenuItem strokeMenuItem3;// 较粗菜单private JMSEO靠我enuItem clearMenuItem;// 清除菜单private JMenuItem foregroundMenuItem;// 前景色菜单private JMenuItem backgrouSEO靠我ndMenuItem;// 背景色菜单private JMenuItem eraserMenuItem;// 橡皮菜单private JMenuItem exitMenuItem;// 退出菜单priSEO靠我vate JMenuItem saveMenuItem;// 保存菜单private JMenuItem shuiyinMenuItem;// 水印 菜单private String shuiyin SEO靠我= "";// 水印字符内容private PictureWindow picWindow;// 简笔画展示窗体private JButton showPicButton;// 展开简笔画按钮publSEO靠我ic DrawPictureFrame() { // 构造组件初始化方法setResizable(false);// 窗体大小不变setTitle("画图程序(水印内容:[" + shuiyin + SEO靠我"])");// 标题setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 窗体关闭则停止程序setBounds(500, 100, 574, 460);SEO靠我// 设置窗口位置和宽高init();// 组件初始化addListener();// 添加组件监听}// DrawPictureFrame()结束private void init() {g.setSEO靠我Color(backgroundColor); // 用背景色设置绘图对象的颜色g.fillRect(0, 0, 570, 390); // 用背景色填充整个画布g.setColor(foreColoSEO靠我r); // 用前景色设置绘图对象的颜色canvas.setImage(image); // 设置画布的图像getContentPane().add(canvas);toolBar = new JToSEO靠我olBar();// 初始化工具栏getContentPane().add(toolBar, BorderLayout.NORTH);// 工具栏添加到窗体最北位置showPicButton = neSEO靠我w JButton("展开简笔画");// 初始化按钮对象,并添加文本内容toolBar.add(showPicButton);// 工具栏添加按钮saveButton = new JButton("SEO靠我保存");// 初始化按钮对象,并添加文本内容toolBar.add(saveButton);// 工具栏添加按钮toolBar.addSeparator();// 添加分割条// 初始化有选中状态的SEO靠我按钮对象,并添加文本内容strokeButton1 = new JToggleButton("细线");strokeButton1.setSelected(true);// 细线按钮处于被选中状态toSEO靠我olBar.add(strokeButton1);// 工具栏添加按钮// 初始化有选中状态的按钮对象,并添加文本内容strokeButton2 = new JToggleButton("粗线");tSEO靠我oolBar.add(strokeButton2);// 工具栏添加按钮// 初始化有选中状态的按钮对象,并添加文本内容strokeButton3 = new JToggleButton("较粗");SEO靠我// 画笔粗细按钮组,保证同时只有一个按钮被选中ButtonGroup strokeGroup = new ButtonGroup();strokeGroup.add(strokeButton1);/SEO靠我/ 按钮组添加按钮strokeGroup.add(strokeButton2);// 按钮组添加按钮strokeGroup.add(strokeButton3);// 按钮组添加按钮toolBar.aSEO靠我dd(strokeButton3);// 工具栏添加按钮toolBar.addSeparator();// 添加分割backgroundButton = new JButton("背景颜色");// SEO靠我初始化按钮对象,并添加文本内容toolBar.add(backgroundButton);// 工具栏添加按钮foregroundButton = new JButton("前景颜色");// 初始化SEO靠我按钮对象,并添加文本内容toolBar.add(foregroundButton);// 工具栏添加按钮toolBar.addSeparator();// 添加分割条shapeButton = newSEO靠我 JButton("图形");toolBar.add(shapeButton);clearButton = new JButton("清 除");// 初始化按钮对象,并添加文本内容toolBar.aSEO靠我dd(clearButton);// 工具栏添加按钮eraserButton = new JButton("橡皮");// 初始化按钮对象,并添加文本内容toolBar.add(eraserButtoSEO靠我n);// 工具栏添加按钮JMenuBar menuBar = new JMenuBar();// 创建菜单栏setJMenuBar(menuBar);// 窗体载入菜单栏JMenu systemMeSEO靠我nu = new JMenu("系统");// 初始化菜单对象,并添加文本内容menuBar.add(systemMenu);// 菜单栏添加菜单对象shuiyinMenuItem = new JMeSEO靠我nuItem("设置水印");// 初始化菜单项对象,并添加文本内容systemMenu.add(shuiyinMenuItem);// 菜单添加菜单项saveMenuItem = new JMenuSEO靠我Item("保存");// 初始化菜单项对象,并添加文本内容systemMenu.add(saveMenuItem);// 菜单添加菜单项systemMenu.addSeparator();// 添加SEO靠我分割条exitMenuItem = new JMenuItem("退出");// 初始化菜单项对象,并添加文本内容systemMenu.add(exitMenuItem);// 菜单添加菜单项JMenSEO靠我u strokeMenu = new JMenu("线型");// 初始化菜单对象,并添加文本内容menuBar.add(strokeMenu);// 菜单栏添加菜单对象strokeMenuItem1SEO靠我 = new JMenuItem("细线");// 初始化菜单项对象,并添加文本内容strokeMenu.add(strokeMenuItem1);// 菜单添加菜单项strokeMenuItem2 SEO靠我= new JMenuItem("粗线");// 初始化菜单项对象,并添加文本内容strokeMenu.add(strokeMenuItem2);// 菜单添加菜单项strokeMenuItem3 =SEO靠我 new JMenuItem("较粗");// 初始化菜单项对象,并添加文本内容strokeMenu.add(strokeMenuItem3);// 菜单添加菜单项JMenu colorMenu = SEO靠我new JMenu("颜色");// 初始化菜单对象,并添加文本内容menuBar.add(colorMenu);// 菜单栏添加菜单对象foregroundMenuItem = new JMenuISEO靠我tem("前景颜色");// 初始化菜单项对象,并添加文本内容colorMenu.add(foregroundMenuItem);// 菜单添加菜单项backgroundMenuItem = new SEO靠我JMenuItem("背景颜色");// 初始化菜单项对象,并添加文本内容colorMenu.add(backgroundMenuItem);// 菜单添加菜单项JMenu editMenu = neSEO靠我w JMenu("编辑");// 初始化菜单对象,并添加文本内容menuBar.add(editMenu);// 菜单栏添加菜单对象clearMenuItem = new JMenuItem("清除"SEO靠我);// 初始化菜单项对象,并添加文本内容editMenu.add(clearMenuItem);// 菜单添加菜单项eraserMenuItem = new JMenuItem("橡皮");// 初SEO靠我始化菜单项对象,并添加文本内容editMenu.add(eraserMenuItem);// 菜单添加菜单项// 创建简笔画展示面板,并将本类当作它的父窗体picWindow = new PicturSEO靠我eWindow(DrawPictureFrame.this);}private void addListener() {// 画板添加鼠标移动事件监听canvas.addMouseMotionListSEO靠我ener(new MouseMotionAdapter() {public void mouseDragged(final MouseEvent e) {// 当鼠标拖曳时if (x > 0 && ySEO靠我 > 0) {// 如果x和y存在鼠标记录if (rubber) {// 橡皮标识为true,表示使用橡皮g.setColor(backgroundColor); // 绘图工具使用背景色g.fillSEO靠我Rect(x, y, 10, 10); // 在鼠标划过的位置画填充的正方型} else { // 如果橡皮标识为false,表示用画笔画图g.drawLine(x, y, e.getX(), e.gSEO靠我etY());// 在鼠滑过的位置画直线} // else结束} // if结束x = e.getX(); // 上一次鼠标绘制点的横坐标y = e.getY(); // 上一次鼠标绘制点的纵坐标caSEO靠我nvas.repaint(); // 更新画布}// mouseDragged()结束public void mouseMoved(final MouseEvent arg0) {// 当鼠标移动时iSEO靠我f (rubber) {// 如果使用橡皮// 设置鼠标指针的形状为图片Toolkit kit = Toolkit.getDefaultToolkit();// 获得系统默认的组件工具包// 利用工具SEO靠我包获取图片Image img = kit.createImage("src/img/icon/鼠标橡皮.png");// 利用工具包创建一个自定义的光标对象// 参数为图片,光标热点(写成0,0就行)SEO靠我和光标描述字符串Cursor c = kit.createCustomCursor(img, new Point(0, 0), "clear");setCursor(c);// 使用自定义的光标} eSEO靠我lse {// 设置鼠标指针的形状为十字光标setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));} // else结束}// SEO靠我mouseMoved()结束});// canvas.addMouseMotionListener()结束canvas.addMouseListener(new MouseAdapter() {// SEO靠我画板添加鼠标单击事件监听public void mouseReleased(final MouseEvent arg0) {// 当按键抬起时x = -1; // 将记录上一次鼠标绘制点的横坐标恢复成SEO靠我-1y = -1; // 将记录上一次鼠标绘制点的纵坐标恢复成-1}// mouseReleased()结束public void mousePressed(MouseEvent e) {// 当按键SEO靠我按下时if (drawShape) {// 如果此时鼠标画的是图形switch (shape.getType()) {// 判断图形的种类case Shapes.YUAN:// 如果是圆形// 计算坐SEO靠我标,让鼠标处于图形的中心位置int yuanX = e.getX() - shape.getWidth() / 2;int yuanY = e.getY() - shape.getHeigth() /SEO靠我 2;// 创建圆形图形,并指定坐标和宽高Ellipse2D yuan = new Ellipse2D.Double(yuanX, yuanY, shape.getWidth(), shape.getSEO靠我Heigth());g.draw(yuan);// 画图工具画此圆形break;// 结束switch语句case Shapes.FANG:// 如果是方形// 计算坐标,让鼠标处于图形的中心位置inSEO靠我t fangX = e.getX() - shape.getWidth() / 2;int fangY = e.getY() - shape.getHeigth() / 2;// 创建方形图形,并指定SEO靠我坐标和宽高Rectangle2D fang = new Rectangle2D.Double(fangX, fangY, shape.getWidth(), shape.getHeigth());g.SEO靠我draw(fang);// 画图工具画此方形break;// 结束switch语句}// switch结束canvas.repaint(); // 更新画布drawShape = false;} //SEO靠我 if结束}// mousePressed()结束});// canvas.addMouseListener()结束toolBar.addMouseMotionListener(new MouseMoSEO靠我tionAdapter() {// 工具栏添加鼠标移动监听public void mouseMoved(final MouseEvent arg0) {// 当鼠标移动时// 设置鼠标指针的形状为默认SEO靠我光标setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));}// mouseMoved()});// toolBar.addMousSEO靠我eMotionListener()结束strokeButton1.addActionListener(new ActionListener() {// “细线”按钮添加动作监听public void SEO靠我actionPerformed(final ActionEvent arg0) {// 单击时// 声明画笔的属性,粗细为1像素,线条末端无修饰,折线处呈尖角BasicStroke bs = new SEO靠我BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);g.setStroke(bs); // 画图工具使用此画笔}// actionSEO靠我Performed()结束});// strokeButton1.addActionListener()结束strokeButton2.addActionListener(new ActionListSEO靠我ener() {// “粗线”按钮添加动作监听public void actionPerformed(final ActionEvent arg0) {// 声明画笔的属性,粗细为2像素,线条末端无修SEO靠我饰,折线处呈尖角BasicStroke bs = new BasicStroke(2, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);g.setStrokSEO靠我e(bs); // 画图工具使用此画笔}// actionPerformed()结束});// strokeButton2.addActionListener()结束strokeButton3.addSEO靠我ActionListener(new ActionListener() {// “较粗”按钮添加动作监听public void actionPerformed(final ActionEvent arSEO靠我g0) {// 声明画笔的属性,粗细为4像素,线条末端无修饰,折线处呈尖角BasicStroke bs = new BasicStroke(4, BasicStroke.CAP_BUTT, BasicSEO靠我Stroke.JOIN_MITER);g.setStroke(bs); // 画图工具使用此画笔}// actionPerformed()结束});// strokeButton3.addActionSEO靠我Listener()结束backgroundButton.addActionListener(new ActionListener() {// 背景颜色按钮添加动作监听public void actiSEO靠我onPerformed(final ActionEvent arg0) {// 单击时// 打开选择颜色对话框,参数依次为:父窗体、标题、默认选中的颜色(青色)Color bgColor = JColSEO靠我orChooser.showDialog(DrawPictureFrame.this, "选择颜色对话框", Color.CYAN);if (bgColor != null) {// 如果选中的颜色不SEO靠我是空的backgroundColor = bgColor;// 将选中的颜色赋给背景色变量}// 背景色按钮的也更换为这种背景颜色backgroundButton.setBackground(backSEO靠我groundColor);g.setColor(backgroundColor); // 绘图工具使用背景色g.fillRect(0, 0, 570, 390); // 画一个背景颜色的方形填满整个画SEO靠我布g.setColor(foreColor); // 绘图工具使用前景色canvas.repaint(); // 更新画布}// actionPerformed()结束});// backgroundSEO靠我Button.addActionListener()结束foregroundButton.addActionListener(new ActionListener() {// 前景色颜色按钮添加动作监SEO靠我听public void actionPerformed(final ActionEvent arg0) {// 单击时// 打开选择颜色对话框,参数依次为:父窗体、标题、默认选中的颜色(青色)ColSEO靠我or fColor = JColorChooser.showDialog(DrawPictureFrame.this, "选择颜色对话框", Color.CYAN);if (fColor != nulSEO靠我l) {// 如果选中的颜色不是空的foreColor = fColor;// 将选中的颜色赋给前景色变量}// 前景色按钮的文字也更换为这种颜色foregroundButton.setForegroSEO靠我und(foreColor);g.setColor(foreColor); // 绘图工具使用前景色}// actionPerformed()结束});// foregroundButton.addASEO靠我ctionListener()结束clearButton.addActionListener(new ActionListener() {// 清除按钮添加动作监听public void actionSEO靠我Performed(final ActionEvent arg0) {// 单击时g.setColor(backgroundColor); // 绘图工具使用背景色g.fillRect(0, 0, 5SEO靠我70, 390); // 画一个背景颜色的方形填满整个画布g.setColor(foreColor); // 绘图工具使用前景色canvas.repaint(); // 更新画布}// actionPSEO靠我erformed()结束});// eraserButton.addActionListener()结束eraserButton.addActionListener(new ActionListeneSEO靠我r() {// 橡皮按钮添加动作监听public void actionPerformed(final ActionEvent arg0) {// 单击时// 单击工具栏上的橡皮按钮,使用橡皮if (SEO靠我eraserButton.getText().equals("橡皮")) {rubber = true; // 设置橡皮标识为trueeraserButton.setText("画图"); // 改变SEO靠我按钮上显示的文本为画图} else { // 单击工具栏上的画图按钮,使用画笔rubber = false; // 设置橡皮标识为falseeraserButton.setText("橡皮"); //SEO靠我 改变按钮上显示的文本为橡皮g.setColor(foreColor); // 设置绘图对象的前景色} // else结束}// actionPerformed()结束});// eraserButtSEO靠我on.addActionListener()结束shapeButton.addActionListener(new ActionListener() {// 图形按钮添加动作监听public voidSEO靠我 actionPerformed(ActionEvent e) {// 单击时// 创建图形选择组件ShapeWindow shapeWindow = new ShapeWindow(DrawPictSEO靠我ureFrame.this);int shapeButtonWidth = shapeButton.getWidth();// 获取图像按钮宽度int shapeWindowWidth = shapeSEO靠我Window.getWidth();// 获取图形按钮高度int shapeButtonX = shapeButton.getX();// 获取图形按钮横坐标int shapeButtonY = shSEO靠我apeButton.getY();// 获取图形按钮纵坐标// 计算图形组件横坐标,让组件与“图形”按钮居中对齐int shapeWindowX = getX() + shapeButtonX - (SEO靠我shapeWindowWidth - shapeButtonWidth) / 2;// 计算图形组件纵坐标,让组件显示在“图形”按钮下方int shapeWindowY = getY() + shapSEO靠我eButtonY + 80;// 设置图形组件坐标位置shapeWindow.setLocation(shapeWindowX, shapeWindowY);shapeWindow.setVisiblSEO靠我e(true);// 图形组件可见}// actionPerformed()结束});// shapeButton.addActionListener()结束saveButton.addActionLSEO靠我istener(new ActionListener() {// 保存按钮添加动作监听public void actionPerformed(final ActionEvent arg0) {// 单SEO靠我击时addWatermark();// 添加水印DrawImageUtil.saveImage(DrawPictureFrame.this, image);// 打印图片}});exitMenuIteSEO靠我m.addActionListener(new ActionListener() { // 退出菜单栏添加动作监听public void actionPerformed(final ActionEveSEO靠我nt e) { // 单击时System.exit(0); // 程序关闭}/// actionPerformed()结束});// exitMenuItem.addActionListener()结SEO靠我束eraserMenuItem.addActionListener(new ActionListener() { // 橡皮菜单栏添加动作监听public void actionPerformed(fSEO靠我inal ActionEvent e) { // 单击时if (eraserMenuItem.getText().equals("橡皮")) { // 如果菜单的文字内容为“橡皮”rubber = tSEO靠我rue; // 设置橡皮标识为trueeraserMenuItem.setText("画图"); // 改变菜单上显示的文本为画图eraserButton.setText("画图"); // 改变按钮SEO靠我上显示的文本为画图} else { // 单击工具栏上的画图按钮,使用画笔rubber = false; // 设置橡皮标识为falseeraserMenuItem.setText("橡皮"); //SEO靠我 改变菜单上显示的文本为“橡皮”eraserButton.setText("橡皮"); // 改变按钮上显示的文本为“橡皮”g.setColor(foreColor); // 设置绘图对象的前景色} SEO靠我// else结束}// actionPerformed()结束});// eraserMenuItem.addActionListener()结束clearMenuItem.addActionLisSEO靠我tener(new ActionListener() { // 清除菜单添加动作监听public void actionPerformed(final ActionEvent e) { // 单击时gSEO靠我.setColor(backgroundColor); // 绘图工具使用背景色g.fillRect(0, 0, 570, 390); // 画一个背景颜色的方形填满整个画布g.setColor(foSEO靠我reColor); // 绘图工具使用前景色canvas.repaint(); // 更新画布}// actionPerformed()结束});// clearMenuItem.addActionLSEO靠我istener()结束strokeMenuItem1.addActionListener(new ActionListener() {// "细线"菜单添加动作监听public void actionSEO靠我Performed(final ActionEvent e) { // 单击时// 声明画笔的属性,粗细为1像素,线条末端无修饰,折线处呈尖角BasicStroke bs = new BasicStrSEO靠我oke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);g.setStroke(bs); // 画图工具使用此画笔strokeButton1.setSSEO靠我elected(true); // "细线"按钮设为选中状态}// actionPerformed()结束});// strokeMenuItem1.addActionListener()结束stroSEO靠我keMenuItem2.addActionListener(new ActionListener() {// "粗线"菜单添加动作监听public void actionPerformed(finalSEO靠我 ActionEvent e) { // 单击时// 声明画笔的属性,粗细为2像素,线条末端无修饰,折线处呈尖角BasicStroke bs = new BasicStroke(2, BasicStrSEO靠我oke.CAP_BUTT, BasicStroke.JOIN_MITER);g.setStroke(bs); // 画图工具使用此画笔strokeButton2.setSelected(true); SEO靠我// "粗线"按钮设为选中状态}// actionPerformed()结束});// strokeMenuItem2.addActionListener()结束strokeMenuItem3.addSEO靠我ActionListener(new ActionListener() {// "较粗"菜单添加动作监听public void actionPerformed(final ActionEvent e)SEO靠我 { // 单击时// 声明画笔的属性,粗细为4像素,线条末端无修饰,折线处呈尖角BasicStroke bs = new BasicStroke(4, BasicStroke.CAP_BUTT, BSEO靠我asicStroke.JOIN_MITER);g.setStroke(bs); // 画图工具使用此画笔strokeButton3.setSelected(true); // "较粗"按钮设为选中状态SEO靠我}// actionPerformed()结束});// strokeMenuItem3.addActionListener()结束foregroundMenuItem.addActionListenSEO靠我er(new ActionListener() {// 前景色菜单添加动作监听public void actionPerformed(final ActionEvent e) { // 单击时// 打SEO靠我开选择颜色对话框,参数依次为:父窗体、标题、默认选中的颜色(青色)Color fColor = JColorChooser.showDialog(DrawPictureFrame.this, "选择颜SEO靠我色对话框", Color.CYAN);if (fColor != null) { // 如果选中的颜色不是空的foreColor = fColor; // 将选中的颜色赋给前景色变量} // if结束SEO靠我foregroundButton.setForeground(foreColor);// 前景色按钮的文字也更换为这种颜色g.setColor(foreColor); // 绘图工具使用前景色}// SEO靠我actionPerformed()结束});// foregroundMenuItem.addActionListener()结束backgroundMenuItem.addActionListeneSEO靠我r(new ActionListener() {// 背景色菜单添加动作监听public void actionPerformed(final ActionEvent e) { // 单击时// 打开SEO靠我选择颜色对话框,参数依次为:父窗体、标题、默认选中的颜色(青色)Color bgColor = JColorChooser.showDialog(DrawPictureFrame.this, "选择颜SEO靠我色对话框", Color.CYAN);if (bgColor != null) { // 如果选中的颜色不是空的backgroundColor = bgColor; // 将选中的颜色赋给背景色变量}SEO靠我 // if结束// 背景色按钮更改按钮自身的背景颜色,其颜色与画板背景颜色相同backgroundButton.setBackground(backgroundColor);g.setColor(bSEO靠我ackgroundColor); // 绘图工具使用背景色g.fillRect(0, 0, 570, 390); // 画一个背景颜色的方形填满整个画布g.setColor(foreColor); /SEO靠我/ 绘图工具使用前景色canvas.repaint(); // 更新画布}// actionPerformed()结束});// backgroundMenuItem.addActionListeneSEO靠我r()结束saveMenuItem.addActionListener(new ActionListener() { // 保存菜单添加动作监听public void actionPerformed(SEO靠我ActionEvent e) { // 单击时addWatermark();// 添加水印DrawImageUtil.saveImage(DrawPictureFrame.this, image);/SEO靠我/ 打印图片}// actionPerformed()结束});// saveMenuItem.addActionListener()结束shuiyinMenuItem.addActionListenSEO靠我er(new ActionListener() {// 水印菜单项添加动作监听public void actionPerformed(ActionEvent e) {// 单击时// 弹出输入对话框sSEO靠我huiyin = JOptionPane.showInputDialog(DrawPictureFrame.this, "你想添加什么水印?");if (null == shuiyin) {// 如果SEO靠我输入对话框返回的是nullshuiyin = "";// 字符串设为空内容} else {// 如果不是nullsetTitle("画图程序(水印内容:[ " + shuiyin + " ] )");SEO靠我// 修改窗体标题} // else结束}// actionPerformed()结束});// shuiyinMenuItem.addActionListener()结束showPicButton.SEO靠我addActionListener(new ActionListener() {// 展示简笔画按钮添加动作监听public void actionPerformed(ActionEvent e) {SEO靠我// 单击时boolean isVisible = picWindow.isVisible();// 获取简笔画展示窗体可见状态if (isVisible) {// 如果简笔画展示窗体是可见的showSEO靠我PicButton.setText("展开简笔画");// 修改按钮的文本picWindow.setVisible(false);// 隐藏简笔画展示窗体} else {// 如果是隐藏的showPiSEO靠我cButton.setText("隐藏简笔画");// 修改按钮的文本// 重新指定简笔画展示窗体的显示位置// 横坐标 = 主窗体横坐标 - 简笔画窗体宽度 - 5// 纵坐标 = 主窗体纵坐标piSEO靠我cWindow.setLocation(getX() - picWindow.getWidth() - 5, getY());picWindow.setVisible(true);// 简笔画展示窗体SEO靠我可见} // else结束}// actionPerformed()结束});// showPicButton.addActionListener()结束}// addListener()结束/***SEO靠我 恢复展开简笔画按钮的文本内容,此方法供简笔画面板的“隐藏”按钮调用。*/public void initShowPicButton() {showPicButton.setText("展开简笔画")SEO靠我;// 修改按钮的文本}// initShowPicButton()结束private void addWatermark() {if (!"".equals(shuiyin.trim())) {//SEO靠我 如果水印字段不是空字符串g.rotate(Math.toRadians(-30));// 将图片旋转-30弧度Font font = new Font("楷体", Font.BOLD, 60);//SEO靠我 设置字体g.setFont(font);// 载入字体g.setColor(Color.GRAY);// 使用灰色AlphaComposite alpha = AlphaComposite.SrcOSEO靠我ver.derive(0.4f);// 设置透明效果g.setComposite(alpha);// 使用透明效果g.drawString(shuiyin, 150, 500);// 绘制文字canvSEO靠我as.repaint();// 面板重绘g.rotate(Math.toRadians(30));// 将旋转的图片再转回来alpha = AlphaComposite.SrcOver.derive(SEO靠我1f);// 不透明效果g.setComposite(alpha);// 使用不透明效果g.setColor(foreColor);// 画笔恢复之前颜色} // if结束s}// addWatermSEO靠我ark()结束public void getShape(Shapes shape) {this.shape = shape;// 将返回的图形对象付给类的全局变量drawShape = true;//SEO靠我 画图形标识变量为true,说明现在鼠标画的是图形,而不是线}// getShape()结束public static void main(String[] args) {DrawPictureFraSEO靠我me frame = new DrawPictureFrame();// 创建窗体对象frame.setVisible(true);// 让窗体可见}// main结束 }// DraSEO靠我wPictureFrame类 结束

DrawPictureCanvas类

package com.mr.draw;import java.awt.Canvas;//画板类 import jSEO靠我ava.awt.Graphics;//绘图类 import java.awt.Image;//图像类public class DrawPictureCanvas extends CanSEO靠我vas {private Image image = null;// 创建画板中图片对象public void setImage(Image image) {this.image = image;//SEO靠我 Ctrl+Shift+S 快捷 Generate Get Set}public void paint(Graphics g) { // 重写 paint方法g.drawImage(image, 0,SEO靠我 0, null);// 在画布绘图}public void update(Graphics g) { // 重写 update方法 解决屏幕闪烁paint(g);} }//DrawPSEO靠我ictureCanvas类结束

PictureWindow类

package com.mr.draw;import java.awt.BorderLayout; import java.aSEO靠我wt.Container; import java.awt.FlowLayout; import java.awt.Image; import javaSEO靠我.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; SEO靠我 import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.SEO靠我JPanel; import javax.swing.JWindow; import com.mr.util.BackgroundPanel;/*** 简笔画展示窗体 SEO靠我 */ public class PictureWindow extends JWindow {private JButton changeButton;// 更换图片按SEO靠我钮private JButton hiddenButton;// 隐藏按钮private BackgroundPanel centerPanel;// 展示图片的带背景图面板File list[ ];SEO靠我// 图片文件数组int index;// 当前选中的图片索引DrawPictureFrame frame;// 父窗体/*** 构造方法* * @param frame - 父窗体*/public SEO靠我PictureWindow(DrawPictureFrame frame) {this.frame = frame;// 构造参数的值赋给父窗体setSize(400, 460);// 设置窗体宽高iSEO靠我nit();// 初始化窗体组件addListener();// 给组件添加监听}// PictureWindow()结束/*** 组件初始化方法*/private void init() {ContSEO靠我ainer c = getContentPane();// 获取窗体主容器File dir = new File("src/img/picture");// 创建简笔画素材文件夹对象list = diSEO靠我r.listFiles();// 获取文件夹里的所有文件// 初始化背景面板,使用图片文件夹里第一张简笔画centerPanel = new BackgroundPanel(getListImage(SEO靠我));c.add(centerPanel, BorderLayout.CENTER);// 背景面板放到主容器中部FlowLayout flow = new FlowLayout(FlowLayoutSEO靠我.RIGHT);// 创建右对齐的流布局flow.setHgap(20);// 水平间隔20像素JPanel southPanel = new JPanel();// 创建南部面板southPanelSEO靠我.setLayout(flow);// 南部面板使用刚才创建好的流布局changeButton = new JButton("更换图片");// 实例化“更换图片”按钮southPanel.add(cSEO靠我hangeButton);// 南部面板添加按钮hiddenButton = new JButton("隐藏");// 实例化“隐藏”按钮southPanel.add(hiddenButton);//SEO靠我 南部面板添加按钮c.add(southPanel, BorderLayout.SOUTH);// 南部面板放到主容器的南部位置}// init()结束/*** 添加监听*/private void SEO靠我addListener() {hiddenButton.addActionListener(new ActionListener() {// 隐藏按钮添加动作监听public void actionPSEO靠我erformed(ActionEvent e) {// 单击时setVisible(false);// 本窗体不可见frame.initShowPicButton();//父类窗体还原简笔画按钮文本}SEO靠我// actionPerformed();});// hiddenButton.addActionListener()结束changeButton.addActionListener(new ActiSEO靠我onListener() {// 更换图片按钮添加动作监听public void actionPerformed(ActionEvent e) {// 单击时centerPanel.setImage(SEO靠我getListImage());// 背景面板重新载入图片}// actionPerformed();});// changeButton.addActionListener()结束}// addLiSEO靠我stener()/*** 获取图片文件夹下的图片,每次调用此方法,都会获得不同的文件对象* * @return 返回图片对象*/private Image getListImage() {StringSEO靠我 imgPath = list[index].getAbsolutePath();// 获取当前索引下的图片文件路径ImageIcon image = new ImageIcon(imgPath);/SEO靠我/ 获取此图片文件的图标对象index++;// 索引变量递增if (index >= list.length) {// 如果索引变量超过图片数量了index = 0;// 索引变量归零} // ifSEO靠我结束return image.getImage();// 获得图标对象的图片对象}// getListImage()结束 }// PictureWindow类结束

后续将更新,如何将在eSEO靠我clipse中写的java项目导出打包成。exe类文件,在没有非JVM的环境下执行,直接打包成安装包,在其它windows电脑安装运行。

结语

第一次在CSDN写东西 ,这些也是我自己最近遇到的问题,和一SEO靠我些解决的方法经验,希望对你们有帮助。也可以记录自己的一些经验和成长。

有志者,事竟成,破釜沉舟,百二秦关终属楚;

有心人,天不负,卧薪尝胆,三千越甲可吞吴。
“SEO靠我”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与 我们联系删除或处理,客服邮箱:html5sh@163.com,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同 其观点或证实其内容的真实性。

网站备案号:浙ICP备17034767号-2