`
什么世道
  • 浏览: 219447 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

图形化界面开发,关于画布的问题

阅读更多

 最近写了一些应用的界面,还有一些分形图形,在这个过程中感觉比较充实,只是伴随这自己的兴趣 ,虽然暂时没有足够的时间做下去(含蓄的表示还在苦逼的的课程设计中苦苦的不能自拔,   T.T),但以后会多多花些时间在上面多多学习欣赏创造间在上面多多学习欣赏创造  ,这个过程中也发现了不少问题
比如说,获取画布在上面画东西。本人琢磨了许久,一开始只知道用添加监听器来实现,但是后来觉得不是很方便,假如打开窗口惊喜就在你的眼前岂不更好,   自己摸索了1~2天,经过几次试验和调试,发现了可以用 绘图类Graphics和画布Canvas 类来实现获取画板画布并画图。
  首先介绍一下添加监听器的方法,这个是我们五子棋中的一贯做法,这里可以照搬过来,以鼠标点击窗体上按钮来作为事件源(只是举一例,其他自己可以YY啦~~~,在此就不罗嗦),打开窗体后不会有显示出你的图像哟,点击按钮,图像才会显现。简要附上关键代码

/**
 * 定义五子棋的窗体类,该类继承自JFrame
 * @author YangKang
 *
 */
public class Five_In_Row extends JFrame{
/**
*Five_In_Row是JFrame窗体类的子类,这样才能获取画布和重绘
*

//定义入口主函数
	public static void main(String[] args) {
		Five_In_Row df = new Five_In_Row();
		df.iniGUI();
	}
/**
 * 定义一个初始化界面的方法
 */
	public void iniGUI(){
		//设置窗体的属性值
		this.setTitle("五子棋");
		this.setSize(new Dimension(580,600));
		this.setDefaultCloseOperation(3);
		this.setLocationRelativeTo(null);//以上不是重点,可以忽略
		this.setVisible(true);
                //这一步及其重要,必须放在获取画布对象之前,否则不能获取到画布对象

		
		//在窗体可见之后,获取画布的对象
                //获取画布对象的关键语句
		Graphics g = this.getGraphics();
		
		//实例化事件处理类的对象
		ChessListener cl = new ChessListener(g);
		//给事件源添加鼠标监听器方法,绑定事件处理类的对象
		this.addMouseListener(cl);
	}


添加动作监听器
public class ChessListener extends MouseAdapter {
	//定义画布属性
	private Graphics g;
	
	/**
	 * 构造方法
	 * @param g要赋给属性的参数名
	 */

         //添加构造器,传入画布对象
	public ChessListener(Graphics g){
		this.g = g;
	}



接下来扯一下怎么直接获取画布绘图

用绘图类Graphics画图

/**
 * 分形
 * @author YangKang
 *
 */

public class Fractal extends JFrame  {
	/**
	 * 程序的入口主函数
	 * @param args
	 */
		
	private Graphics g;//必须定义全局变量,否则将被判为空指针!!!
     
	public static void main(String[] args) {
		//实例化分形窗口主界面
		
		Fractal fl = new Fractal();
		fl.iniGUI();
	}

/**
 * 定义一个初始界面的方法
 */
	public void iniGUI(){
		//设置窗口的属性
		this.setTitle("分形界面");
		this.setSize(new Dimension(800,800));
		this.setDefaultCloseOperation(3);
		this.setLocationRelativeTo(null);//以上都是废话
		this.setVisible(true);//窗体不要搞时髦设隐形
		g = this.getGraphics();//获取窗体画布
		}
/**
	 * 定义一个分形图形的方法
	 */
	public void frac(Graphics g){
	//接下来随意发挥~~~,什么g.fillxxx, g.drawxxx都用上.....
  
		}





画布Canvas类获取画布

/**
*CanvasDemo 是Canvas 画布类的子类,说白了Canvas类也基本用到了Graphics方法。 
*/

public class CanvasDemo extends Canvas {

	/**
	 * 定义一个绘图的方法
	 */
	
	//重绘方法
	public void paint(Graphics g){
		//绘制三角形
		int x[] = {20 , 80, 140};
		int y[] = {270, 200, 270};
		g.drawPolygon(x, y, 3);
		
	}
	
		
	/**
	 * @param args定义入口主函数
	 * 
	 */
	public static void main(String[] args) {
		JFrame jf = new JFrame();
		CanvasDemo cm = new CanvasDemo();
		cm.setSize(300,300);
		jf.add(cm,BorderLayout.CENTER);
	        jf.pack();//这个什么意思,猜猜看?
		jf.setVisible(true);
		
	}

}




也许有留心的孩纸会有疑问,WHY你小子定义的类不是什么继承窗体类就是什么画布类?
因为这些图形界面都继承于Component类,继承窗体和画布类直接可以调用父类重绘的方法,从而不会导致刚打开的画面一下子就消失了。这么晚了,也该睡了.......最后附上画布重绘的方法
public void paint (Graphics g){
super.paint(g);
g...........;//那里不会点哪里吧O.O

}


 

分享到:
评论

相关推荐

    PluginPDF&Notes.7z

    插件开发核心技术,主要介绍插件开发的核心知识要点...View: Draw2d 图形化界面 Control 核心 mode 用户设计 (绘图,着色,图形布局管理,图形缩放控制) SWT 画布 Canvas,处理所有图像显示及交互事件 (本地SWT层)

    基于Qt+C++的CAD图形设计平台源码(毕业设计&课程设计&项目开发)

    基于Qt+C++的CAD图形设计平台源码,适合毕业设计...软件界面的设计与Windows自带的画图软件类似,每个图形文件与画布相关联,提供菜单、按钮、工具栏、状态栏等显示信息,支持鼠标、键盘多端操作,符合大众的操作习惯。

    vc++6.0 程序设计学与用教程

    主要包括Java编程基础知识、Java算术运算符、Java编程语法、面向对象程序设计基本概念、系统类的使用和应用、图形用户界面设计、图形处理、多媒体处理、异常处理、多线程、网络编程、输入输出处理与序列化、Java本机...

    pyplan-ide:Pyplan是用于创建和共享数据分析应用程序的图形化集成开发环境

    创建用户界面并在画布上拖动节点。 最终用户可以一键分享最终的应用程序。 在其最突出的功能中,您会发现: 辅助拖放图形编程 可视化影响图表示逻辑流程 轻松创建交互式用户界面 一键发布和共享,增强协作能力 ...

    基于Python开发绘图工具(计算机图形学大作业)【100010962】

    在老师所给框架代码上进行修改完善,完成了所有要求的指令输入输出,GUI 界面实现了 CLI 部分的所有功能,包括设置画笔颜色、重置画布、保存画布、两种算法绘制线段、两种算法绘制多边形、绘制椭圆、两种算法绘制曲线、...

    python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择

    主窗口通常用在提供一个大的中央窗口部件(例如文本编辑或者绘制画布)以及周围菜单、工具条和一个状态条。QMainWindow常常被继承,因为这使得封装中央部件、菜单和工具条以及窗口状态变得更容易。继承使创建

    快速开发平台-源代码-cloud版

    零代码开发:配备大量可复用控件,通过操作界面元素,拖拽控件自动生成可视化应用; 大屏设计:自由布局页面,拖拽控件至页面中,针对不同的控件进行内容设值和数据绑定,所见即所得的实现大屏可视化页面开发 门户...

    基于MFC界面和C/S架构的网络白板

    基于MFC开发的网络白板,将主要作图功能封装在了画布类中,相对独立性比较强。适合初学者进一步提升自己。网络传输基于UDP,程序界面做了适当美化。 程序可实现多个客户端与服务器互联,并同步作图信息,可绘制简单...

    matlab-simulink教程

    Simulink则提供了一个直观的界面,使得用户可以使用图形化方式来建立模型。用户可以将各种组件(如传感器、执行器、控制器等)拖放到画布上,并使用连接线将它们连接起来。这些组件可以表示各种物理和数学系统,如...

    fuzzy-playground:学习计算机图形学的游乐场

    一个不断发展的环境,可以播放,实验和学习Web图形和用户界面 那有什么意思 ? 它基本上是一个Web应用程序,它使用Svelte来处理运行和与WebGL示例交互所必需的状态管理,这些示例是教程的一部分。 该应用程序显示...

    诺基亚Java用户界面API程序员指南

    诺基亚电话具有声音功能,也具备较好的图形功能,所以我们把诺基亚Java 用户界面 API 介绍给MIDlet 开发伙伴,使他们能利用这些功能。未来版本的标准MIDP 可望涉及这些功 能。 诺基亚用户界面 API 提供的下列特性...

    零点起航Delphi7基础教程源码

    Delphi7是Inprise公司推出的面向对象的可视化编程语言,它提供了大量VCL组件,具有强大的数据库开发和网络编程能力,极大地提高了应用系统的开发速度,是目前最优秀的前端开发平台之一。 本书从基础入手,由浅入深...

    vc 电子白板程序修正版

    VS2010编译通过,网上找的比较靠谱点的电子白板源码,基于MFC开发的网络白板,将主要作图功能封装在了画布类中,相对独立性比较强。适合初学者进一步提升自己。网络传输基于UDP,程序界面做了适当美化。 程序可实现...

    matlab-simulink联合并行仿真计算.rar

    Simulink则提供了一个直观的界面,使得用户可以使用图形化方式来建立模型。用户可以将各种组件(如传感器、执行器、控制器等)拖放到画布上,并使用连接线将它们连接起来。这些组件可以表示各种物理和数学系统,如...

    Unity Shader编程和编辑脚本大师班

    您将学习Unity的图形用户界面。所有这些培训都将从头开始。本教程将通过创建一个简单的项目来帮助您学习用户界面。您将学习诸如创建UI面板,画布渲染模式,添加面板,矩形变换简介,锚点,动画按钮,创建滑块,使用...

    android开发实例大全_王东华

    全书分为18章,分别讲解了UI布局实例集锦、控件实例集锦、自动化服务实例集锦、数据存储实例集锦、电话和短信实例集锦、图形图像实例集锦、和网络有关的实例集锦、多媒体实例集锦、Google地图实例集锦、GoogleAPI...

    Amplify Shader Editor.unitypackage

    轻松的图形共享和画布截图按钮 新功能!SRP包自动导入程序 NEW!与Unity 2019的兼容性 新!支持后期处理堆栈着色器 新功能!与Unity插件中的Substance 兼容 !支持自定义渲染纹理 新增!同时支持高清,URP和轻量级...

    Raphael 开发中国省份地图 加入箭头功能

    该 Demo 是使用 Raphael 制作中国省份地图,结合 jquery 实现一 ...小,还实现了点击动态生成箭头数据的开发,在一个画布上勾勒箭头图形,具 体界面请参照工程包中图。附录: 希望对您的项目有所帮助。

    Autodest AutoCAD 2016 ActiveX Reference.chm

    画布内视口控件 曲面曲线提取 上下文相关按住并拖动 输入 SketchUp 文件 (SKP) ReCap 点云工具(英文) 点云管理器、裁剪和对象捕捉 三维动态观察目标 多边形对象捕捉中心 高保真直线和曲线 协调模型 点云动态 UCS ...

    Raphael 开发中国省份地图

    该 Demo 是使用 Raphael 制作中国省份地图,结合 jquery 实现一 些动态点击效果,并且使用扩展 Raphael...小,还实现了点击动态生成热点数据的图形开发,具体界面请参照工程包中 图。附录: 希望对您的项目有所帮助。

Global site tag (gtag.js) - Google Analytics