ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

开发绘图工具

开发绘图工具 目录效果展示开发需求实现流程1、设置面板2、实现图形按钮功能3、实现颜色按钮功能4、实现音效代码展示DrawUI类DrawListener类效果展示开发需求将窗体分为三个区域图形按钮区、颜色按钮区、绘图区且互不干扰点击对应图形按钮在绘图区分别记录鼠标按下、释放瞬间的坐标并完成绘图点击颜色按钮可更换图形颜色绘制单个图形结束时发出画笔沙沙声实现流程1、设置面板面板是一种容器可在其中添加组件如按钮等窗体的默认布局是边框布局即南、北、东、西、中五个方位每个方位只能设置一个面板且南北方向不能设置宽度东西方向不能设置高度中部既不也不要使三个面板分区明显建议加上背景色区分白、浅灰、深灰2、实现图形按钮功能在DrawUI类中添加按钮将按钮名存入数组后续一起添加到面板面板的默认布局是流式布局String btnText[] { 直线,空心椭圆,实心椭圆,矩形, 实心矩形,圆角矩形,长方体,等腰三角形 }; //添加形状按钮 for (int i 0; i btnText.length; i) { JButton jbtn new JButton(btnText[i]); jbtn.setBackground(Color.white); btnPanel.add(jbtn); jbtn.addActionListener(drawListener); }在DrawListener类中//设置全局变量 int x1,y1,x2,y2; Graphics g; String btnState 直线;Override public void actionPerformed(ActionEvent e) { System.out.println(点击成功); String ac e.getActionCommand(); btnState ac;//便于后续选择图形Override public void mousePressed(MouseEvent e) { System.out.println(按下); int x e.getX(); int y e.getY(); x1 x; y1 y; } Override public void mouseReleased(MouseEvent e) { System.out.println(松开); int x e.getX(); int y e.getY(); x2 x; y2 y;3、实现颜色按钮功能在DrawUI中添加按钮​ Color colText[] { Color.WHITE,Color.BLACK,Color.RED,Color.ORANGE,Color.YELLOW,Color.GREEN, Color.BLUE,Color.GRAY,Color.PINK,Color.CYAN,Color.MAGENTA,Color.LIGHT_GRAY }; //添加颜色按钮 for (int i 0; i colText.length; i) { JButton colbtn new JButton( ); colbtn.setBackground(colText[i]); colorPanel.add(colbtn); colbtn.addActionListener(drawListener); } ​在DrawListener类中Override public void actionPerformed(ActionEvent e) { System.out.println(点击成功); String ac e.getActionCommand(); JButton jbtn (JButton) e.getSource(); if(ac.equals( )){ Color col jbtn.getBackground();//获取颜色按钮的背景色 g.setColor(col);//共享颜色给画笔 }4、实现音效所有音频统一转换成wav格式整体流程是获取音频流 → 创建 Clip → 加载数据 → 播放。File file new File(D:\\xzn070311\\其他\\编程入门\\音频素材\\y1731.wav); Override public void mouseReleased(MouseEvent e) { try { AudioInputStream audioIn AudioSystem.getAudioInputStream(file); Clip clip AudioSystem.getClip(); clip.open(audioIn); clip.start(); } catch (Exception a) { System.out.println(播放异常); }try-catch 逻辑try 试试这段代码会不会出错catch 如果出错了就执行这段补救代码别让程序崩掉代码举例try { // 可能出错的代码 int result 10 / 0; } catch (ArithmeticException e) { // 出错后执行的代码 System.out.println(除数不能为零); }代码展示DrawUI类package Draw; import javax.swing.*; import java.awt.*; public class DrawUI { static void main() { DrawUI draw new DrawUI(); draw.showUI(); } public void showUI() { JFrame jf new JFrame(画图工具); jf.setSize(800,700); jf.setLocationRelativeTo(null); jf.setDefaultCloseOperation(3); /*设置边框布局(JFrame中默认布局可不写 南、北、东、西、中 五个方位中每个方位只能放一个组件 */ BorderLayout border new BorderLayout(); jf.setLayout(border); DrawListener drawListener new DrawListener(); Dimension dim new Dimension(100,100); //设置面板是一个容器默认布局是流式布局 Panel btnPanel new Panel(); btnPanel.setBackground(Color.gray); btnPanel.setPreferredSize(dim); Panel colorPanel new Panel(); colorPanel.setBackground(Color.LIGHT_GRAY); colorPanel.setPreferredSize(dim); Panel drawPanel new Panel(); drawPanel.setBackground(Color.white); drawPanel.addMouseListener(drawListener); jf.add(btnPanel,BorderLayout.SOUTH); jf.add(colorPanel,BorderLayout.WEST); jf.add(drawPanel,BorderLayout.CENTER); String btnText[] { 直线,空心椭圆,实心椭圆,矩形,实心矩形,圆角矩形,长方体,等腰三角形 }; //添加形状按钮 for (int i 0; i btnText.length; i) { JButton jbtn new JButton(btnText[i]); jbtn.setBackground(Color.white); btnPanel.add(jbtn); jbtn.addActionListener(drawListener); } Color colText[] { Color.WHITE,Color.BLACK,Color.RED,Color.ORANGE,Color.YELLOW,Color.GREEN, Color.BLUE,Color.GRAY,Color.PINK,Color.CYAN,Color.MAGENTA,Color.LIGHT_GRAY }; //添加颜色按钮 for (int i 0; i colText.length; i) { JButton colbtn new JButton( ); colbtn.setBackground(colText[i]); colorPanel.add(colbtn); colbtn.addActionListener(drawListener); } jf.setVisible(true); Graphics g drawPanel.getGraphics(); drawListener.g g; } }DrawListener类package Draw; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.Clip; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.File; public class DrawListener implements ActionListener, MouseListener { int x1,y1,x2,y2; Graphics g; String btnState 直线; File file new File(D:\\谢智宁\\其他\\编程入门\\音频素材\\y1731.wav); Override public void actionPerformed(ActionEvent e) { System.out.println(点击成功); String ac e.getActionCommand(); JButton jbtn (JButton) e.getSource(); if(ac.equals( )){ Color col jbtn.getBackground();//获取颜色按钮的背景色 g.setColor(col);//共享颜色给画笔 }else{ btnState ac; } } Override public void mouseClicked(MouseEvent e) { } Override public void mousePressed(MouseEvent e) { System.out.println(按下); int x e.getX(); int y e.getY(); x1 x; y1 y; } Override public void mouseReleased(MouseEvent e) { System.out.println(松开); try { AudioInputStream audioIn AudioSystem.getAudioInputStream(file); Clip clip AudioSystem.getClip(); clip.open(audioIn); clip.start(); } catch (Exception a) { System.out.println(播放异常); } int x e.getX(); int y e.getY(); x2 x; y2 y; if(btnState.equals(直线)){ g.drawLine(x1,y1,x2,y2); }else if(btnState.equals(实心椭圆)){ g.fillOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2 - x1), Math.abs(y2 - y1)); }else if(btnState.equals(空心椭圆)){ g.drawOval(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2 - x1), Math.abs(y2 - y1)); }else if(btnState.equals(矩形)){ g.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2 - x1), Math.abs(y2 - y1)); }else if(btnState.equals(圆角矩形)){ g.drawRoundRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2 - x1), Math.abs(y2 - y1),20,20); }else if(btnState.equals(长方体)){ g.drawRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2 - x1), Math.abs(y2 - y1)); g.drawRect(Math.min(x1, x2)30, Math.min(y1, y2)-20, Math.abs(x2 - x1), Math.abs(y2 - y1)); g.drawLine(Math.min(x1, x2), Math.min(y1, y2),Math.min(x1, x2)30, Math.min(y1, y2)-20); g.drawLine(Math.max(x1,x2),Math.min(y1,y2),Math.max(x1,x2)30,Math.min(y1,y2)-20); g.drawLine(Math.min(x1,x2),Math.max(y1,y2),Math.min(x1,x2)30,Math.max(y1,y2)-20); g.drawLine(Math.max(x1,x2),Math.max(y1,y2),Math.max(x1,x2)30,Math.max(y1,y2)-20); }else if(btnState.equals(等腰三角形)){ g.drawLine(x1,y1,x2,y2); g.drawLine(x1,y1,2*x1-x2,y2); g.drawLine(x2,y2,2*x1-x2,y2); }else if(btnState.equals(实心矩形)){ g.fillRect(Math.min(x1, x2), Math.min(y1, y2), Math.abs(x2 - x1), Math.abs(y2 - y1)); } } Override public void mouseEntered(MouseEvent e) { } Override public void mouseExited(MouseEvent e) { } }
返回列表