Java Swing实现画板,可以打开,保存,基本图形,画笔设定 |
您所在的位置:网站首页 › java如何画矩形 › Java Swing实现画板,可以打开,保存,基本图形,画笔设定 |
Java Swing实现画板
https://github.com/nekoer723/drawpic 源码已上传 基本要求: 新建一个空白图形文件 打开或者保存一个图形文件 绘制基本图形 直线、矩形、圆、椭圆任意线 添加文字 设定颜色与文字风格 优化: 设定画笔 橡皮擦 操作撤销 画线与图形的预览 1.面板UI设计与实现 1.设计总窗口 布局flowlayout 设置关闭方式 窗体大小不变菜单栏 3个面板(Jpanel),jp1,jp2,jp3 jp1(左侧按钮,15行,1列) 布局Gridlayout(rows:15,clos:1,hgap:10,vgap:10)jp2(画板) 重构 paint函数 背景颜色白色jp3(画笔颜色以及粗细) 布局GridLayout(1行,颜色数组的长度列) Jslider (滑块,调节画笔粗细) 2.实现重构paint函数 public void paint(Graphics g1) { g=(Graphics2D)g1; //画船体 System.out.println("repaint"); super.paint(g); list = dl.list; for (Shape1 l : list) { l.draw(g); } } //public ArrayList list = new ArrayList();list是一个shape1类的数组,里面储存有图像信息,通过对list里图像信息的重绘来实现画板的更新 注意为组件添加监听类 2.画板监听类这个类实现了所有左侧按钮功能,以及对底部jp3中的颜色 定义了图形类,并实现了基本图形 1.画板监听 public class picListener implements ActionListener, MouseListener, MouseMotionListener{ private Color color = Color.BLACK; private Graphics2D g; //画笔属性 private String str;//保存按钮上的字符串。区分不同的按钮 private int x1,y1,x2,y2;//坐标 private JButton nowColor;//当前颜色 private float width;//画笔粗细 private int flag1 = 0; //预显示 private Shape1 flag2 = new ImpLine(-1,-1,-1,-1,Color.WHITE,0);//用于撤销操作的标志 public static ArrayList list =new ArrayList();撤销操作是我自己实现,读者可以尝试用undo函数,比较简单 @Override public void actionPerformed(ActionEvent e) { //判断是颜色按钮还是图形按钮 if ("".equals(e.getActionCommand())) { JButton jb = (JButton) e.getSource(); color = jb.getBackground(); nowColor.setBackground(color);//处理当前颜色 } else { str = e.getActionCommand(); if("文本框".equals(str)) { pic2.paint.textin.setVisible(true); System.out.println(pic2.paint.getDl().getG().getFont().getName()); } else if ("清空".equals(e.getActionCommand())) { list.removeAll(list); pic2.paint.jp2.repaint(); } else if ("撤销".equals(e.getActionCommand())) { //list.remove(list.size() - 1); int t =list.size(); int fff = 0; for(int i = 1; i fff=1; } } if(fff == 1){ for(int i = 0; i list.remove(list.size() - 1); System.out.println("撤销"); pic2.paint.jp2.repaint(); break; } else { list.remove(list.size() - 1); } } } //list.remove(list.size() - 1); //pic2.paint.jp2.repaint(); } } } @Override public void mouseClicked(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { g.setColor(color);//改变画笔的颜色 x1=e.getX();//获取按下时鼠标的x坐标 y1=e.getY();//获取按下时鼠标的y坐标 if("画曲线".equals(str) ||"画直线".equals(str) ||"矩形".equals(str) ||"圆形".equals(str) ||"椭圆".equals(str)||"实心圆形".equals(str) ||"橡皮擦".equals(str)){ System.out.println("press"); list.add(flag2); } } @Override public void mouseReleased(MouseEvent e) { //list.add(flag2); if(flag1 > 0) { System.out.println("removeflage"); list.remove |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |