java frame paint_Java 直线、多段线画板 PaintJFrame (整理)

本文介绍了一个使用Java Swing实现的图形界面应用程序,名为PaintJFrame,用于绘制直线和多段线。程序通过JFrame、JPanel和自定义的PaintJPanel、PaintJButton类实现交互。用户可以通过点击不同的按钮来选择绘制直线或多段线,鼠标点击和移动事件被监听以实现动态绘图效果。在PaintJPanel中,重写了paint方法以绘制图形,并通过后台线程动态更新按钮高亮状态。
摘要由CSDN通过智能技术生成

1 packagedemo;2

3

4

5 importjava.awt.BorderLayout;6 importjava.awt.Color;7 importjava.awt.FlowLayout;8 importjava.awt.Graphics;9 importjava.awt.Toolkit;10 importjava.awt.event.MouseAdapter;11 importjava.awt.event.MouseEvent;12 importjava.awt.event.MouseMotionAdapter;13 importjava.util.Arrays;14

15 importjavax.swing.JButton;16 importjavax.swing.JFrame;17 importjavax.swing.JPanel;18 /**

19 * Java 直线、多段线画板 PaintJFrame (整理)20 *21 * 2016-1-2 深圳 南山平山村 曾剑锋22 *23 *

24 *

一、软件声明:

25 *

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp26 * 本软件是仿AutoCAD部分功能软件,最初设计之初的想法是:实现各种图形的绘制(直线、多段线、圆、写轮眼)。但是27 * 当实现到了目前的状态的时候发现后面的程序开发只不过是对当前程序的复制、粘贴,而且最终绘制出来的图形看上去并不是28 * 很精细、优雅,就如同当您在使用本软件的时候会发现,绘制出来的直线是那种很让人纠结的线,不够平滑的感觉,至少她让29 * 我本人感觉不是太舒服的感觉。30 *

31 *

&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp32 * 同时如果在软件中添加过多的东西,会让人觉的更难以阅读理解,不适合用来沟通交流,尤其是像这种只能通过文字沟通33 * 的方式,所以本人不打算对此软件进行进一步的扩展。34 *

35 *
二、软件结构如下:
  1. 36 *
  2. 所有类的继承关系如下:
    37 *
    • 绘图类继承关系:
      38 * |--Shape
      39 * |--|--SingleLine
      40 * |--|--MultiLine
      41 *
    • 按钮类继承关系(括号内为添加的监听事件):
      42 * |--JButton
      43 * |--|--PaintJButton
      44 * |--|--|--SingleJButton(MouseAdapter)
      45 * |--|--|--MultiJButton(MouseAdapter)
      46 *
    • 窗口类继承关系:
      47 * |--JFrame
      48 * |--|--PaintJFrame
      49 *
    • 绘图面板继承关系(PaintJFrame的内部类,括号内为添加的监听事件):
      50 * |--JPanel
      51 * |--PaintJPanel(MouseAdapter,MouseMotionAdapter)
      52 *
    53 *
  3. 绘图类与按钮来的逻辑关系如下:54 *
    • SingleLine和SingleJButton是对应的;55 *
    • MultiLine和MultJButton是对应的;56 *
    • 当按下SingleJButton时,就能够在面板上绘制SingleLine;57 *
    • 当按下MultJButton时,就能够在面板上绘制MultiLine;58 *
    59 *
  4. GUI图形界面容器、组件的包含关系:
    60 *
    • 61 * |--PaintJFrame(窗口容器,位于main函数中,BorderLayout布局)
      62 * |--|--buttonJPanel(JPanel容器,全局变量,FlowLayout布局)
      63 * |--|--|--singleLineJButton(绘直线按钮,paintJButtons数组中下标为0的位置)
      64 * |--|--|--multiLineJButton(绘多段线按钮,paintJButtons数组中下标为1的位置)
      65 * |--|--paintJPanel(JPanel画板,全局变量)
      66 *
    67 *
68 */

69 public class PaintJFrame extendsJFrame{70 private static final long serialVersionUID = 1L;71 /**

72 * &nbsp &nbsp &nbsp &nbsp73 * 主要用于保存所画图的类型,如:直线、多样线等内容,可以认为是一个容器,包含所有的图形的基本信息,74 * 每次当前绘制的图形都保存在shapes的最后一个位置上,主要是为了便于查找。75 */

76 Shape[] shapes ={};77 /**

78 * 定义一个绘图面板,主要用于绘图79 */

80 PaintJPanel paintJPanel = newPaintJPanel();81 /**

82 * 定义一个按钮面板,主要用于放置按钮83 */

84 JPanel buttonJPanel = new JPanel(newFlowLayout());85 /**

86 * 主要用于保存动态的X轴坐标,通过鼠标移动监听器来获取87 */

88 int trendsX = 0;89 /**

90 * 主要用于保存动态的Y轴坐标,通过鼠标移动监听器来获取91 */

92 int trendsY = 0;93 /**

94 * 主要用于保存点击时的X轴坐标,通过鼠标移动监听器来获取95 */

96 int clickX = 0;97 /**

98 * 主要用于保存点击时的Y轴坐标,通过鼠标移动监听器来获取99 */

100 int clickY = 0;101 /**

102 * 用于放置各种按钮,主要用于凸现当前绘图时的按钮,方便查找,修改103 */

104 PaintJButton[] paintJButtons = new PaintJButton[2];105 /**

106 *

窗口构造函数功能如下:
  1. 107 *
  2. setButtonJPanel();设置按钮面板,主要是添加一些需要的按钮在其中;108 *
  3. setJFrame();设置窗口属性,主要是窗口的一些基本属性设置;109 *
  4. paintJPanel.startRun();启动paintJPanel内部线程,主要用于对画板中图形的计算以及重绘110 *
111 */

112 publicPaintJFrame() {113 setButtonJPanel();114 setJFrame();115 paintJPanel.startRun();116 }117 /**

118 *

设置按钮面板函数功能如下:
  1. 119 *
  2. 创建一个绘制直线的按钮,名字为:直线;120 *
  3. 创建一个绘制多段线的按钮,名字为
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值