`

Java学习系列(十三)Java面向对象之界面编程

 
阅读更多

Java的界面编程

Java在客户端上表现并不突出,客户端往往都是局限在windows平台。AWT(JDK1.0发布,Sun希望在所有平台上都能运行),它并未为界面提供实现,直接调用的是操作系统上相应的界面组件,AWT只能使用各操作系统上界面组件的交集。Swing为绝大部分的界面组件提供了实现,这些组件都是直接回执在空白区域上,Swing自己实现了这些界面组件,因此Swing无需使用各操作系统上界面组件的交集,Swing的UI界面更加统一。

先看几个GUI工具类:
Component:一切【界面组件】的祖先。
MenuComponent:一切【菜单组件】的祖先。
Container(Window-顶级窗口/Panel-不能独立存在):它既可以是普通组件,也可以是存放组件的容器。
【注意】:Swing组件中除了JFrame、JDialog之外,都是轻量级组件。

在AWT里画图:创建Canvas或panel的子类,重写它的onPaint(Graphic g)
Graphic --相当于一个画笔,它们都是空白“矩形区域”。
JPanel,也是一个空白的“矩形区域”,它多了一个“双缓冲”机制。
双缓冲:当我们想往某个“组件”上绘制内容时,程序先在“内存”中绘制一张图片。
----这样就避免了在组件上一个一个地绘制,从而可提高性能。
ImageIO:专门用来做图片输出。UUID:生成随机字符串。

window可以独立存在,而Panel不能。

 

布局管理器:如果不使用布局管理器,而是直接通过x,y,width,height来控制组件的大小,存在弊端:a)当窗口大小改变时,界面变得非常难看;b)当改变运行平台时,界面无法自适应。而使用布局管理器后,我们无需显式控制组件的大小和外观,只要选择合适的布局管理器即可。

FlowLayout是Panel和Applet的默认管理器

 

public class FlowLayoutDemo {
	public static void main(String[] args) {
		Frame frame = new Frame("FlowLayoutDemo");
		FlowLayout layout = new FlowLayout(FlowLayout.LEFT, 20, 30);
		frame.setBounds(80, 80, 100, 200);
		frame.setLayout(layout);
		frame.add(new Button("确定"));
		frame.add(new Button("取消"));
		frame.setVisible(true);
	}
}


BorderLayout将Container分为EAST、SOUTH、WEST、NORTH、CENTER五个区域,Component可以放置在这五个区域的一个位置,BorderLayout是Frame、Dialog的默认管理器。【注意】每个区域只能放一个组件。由于awt基本已经被淘汰,所以有关界面方面的知识点不会讲那么多。

 

JTable使用举例:

 

public class JTableDemo {
	public static void main(String[] args) {
		JFrame jf = new JFrame("MyTable");
		String[] titles = new String[] { "姓名", "年龄", "性别" };
		String[][] data = new String[][] {
				new String[] { "zhangsan", "20", "男" },
				new String[] { "lisi", "21", "男" },
				new String[] { "wangwu", "23", "女" },
				new String[] { "zhaoliu", "22", "女" }, };
		JTable table = new JTable(data, titles);
		jf.add(new JScrollPane(table));
		jf.pack();
		jf.setVisible(true);
	}
}

JDialog使用实例:

 

 

public class JDialogDemo {
	JFrame jf = new JFrame("My对话框");
	JButton bt1 = new JButton("打开mode对话框");
	JButton bt2 = new JButton("打开非mode对话框");
	JDialog jDialog1 = new JDialog(jf, "模式对话框", true);
	JDialog jDialog2 = new JDialog(jf, "非模式对话框", false);

	public void init() {
		jf.add(bt1);
		jf.add(bt2);
		jf.setLayout(new FlowLayout(FlowLayout.LEFT));
		bt1.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				jDialog1.add(new Button("xxx"));
				jDialog1.show();
			}
		});
		bt2.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				jDialog2.show();
			}
		});
		jf.pack();
		jf.setVisible(true);
	}

	public static void main(String[] args) {
		new JDialogDemo().init();
	}
}

 

 

JDialog读取文件内容:

 

public class JDialogDemo {
	JFrame jf = new JFrame("对话框測試");
	JButton bn = new JButton(" 打开文件");
	JFileChooser jfc = new JFileChooser("f:/");
	JTextArea jta = new JTextArea(10, 80);

	public void init() {
		jf.add(new JScrollPane(jta));// 放在中间
		JPanel jp = new JPanel();
		jp.add(bn);
		jp.setLayout(new FlowLayout());
		jf.add(jp, BorderLayout.SOUTH);
		bn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				jfc.showOpenDialog(bn);
				File file = jfc.getSelectedFile();
				BufferedReader br = null;
				try {
					jta.setText("");
					br = new BufferedReader(new InputStreamReader(
							new FileInputStream(file)));
					String line = null;
					while ((line = br.readLine()) != null) {
						jta.append(line + "\n\r");
					}
				} catch (IOException ex) {
					ex.printStackTrace();
				}

			}
		});
		jf.pack();
		jf.setVisible(true);
	}

	public static void main(String[] args) {
		new JDialogDemo().init();
	}
}


事件编程:一个有UI的程序,无非就是new——>add....,而Java的事件处理模式,采用委托类的事件处理。

 

委托类的事件处理:a) 当事件源发生事件时,事件源不会对事件进行处理,他只是发出一个事件,事件会传给监听器,监听就【只能通过】事件对象来获取关于事件的详细信息,事件监听器都要实现一个【特定】的方法。【事件源】一切组件都可能是事件源。【事件】无需我们理会,类似的发出事件的过程也无需我们操心。【监听器】需要我们实现。监听器要实现相应的接口(规范)。不同事件,就会有相应的监听器,需要为事件源上不同类型的事件,注册(声明)相应的监听器。

实例说明:

 

public class ActionListenerDemo {
	public void init() {
		JFrame jf = new JFrame("事件监听实例");
		JButton jbButton = new JButton("点击");
		jf.setLayout(new FlowLayout(FlowLayout.LEFT));
		jf.add(jbButton);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setSize(300, 200);
		jf.pack();
		jf.setVisible(true);
		jbButton.addActionListener(new MyActionListener());
	}

	class MyActionListener implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent e) {
			System.out.println("事件在 " + e.getWhen() + "发生");
		}
	}

	public static void main(String[] args) {
		new ActionListenerDemo().init();
	}
}

 

 

菜单:AWT的菜单中,MenuBar包含多个Menu,Menu包含多个MenuItem。而Swing的菜单要比AWT的菜单的功能更加强大,比如Swing菜单支持图标菜单。

ImageIO:

使用 ImageIO 类的静态方法可以执行许多常见的图像 I/O 操作。
此包包含一些基本类和接口,有的用来描述图像文件内容(包括元数据和缩略图)(IIOImage);有的用来控制图像读取过程(ImageReader、ImageReadParam 和 ImageTypeSpecifier)和控制图像写入过程(ImageWriter 和 ImageWriteParam);还有的用来执行格式之间的代码转换 (ImageTranscoder) 和报告错误 (IIOException)。

举例说明(生成随机验证码):

public class Test {
	public static void main(String[] args) throws IOException {
		Random rand = new Random();
		// 在內存中创建一张真彩色图片
		BufferedImage image = new BufferedImage(150, 25,
				BufferedImage.TYPE_4BYTE_ABGR);
		Graphics2D g = (Graphics2D) image.getGraphics();// 获取一支画笔
		g.setColor(Color.RED);
		g.setFont(new Font("Arial Black", Font.ITALIC, 16));
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < 6; i++) {
			char c = (char) (rand.nextInt(26) + 65);
			sb.append(c);
			double angle = (rand.nextDouble() * (-Math.PI / 6)) + Math.PI / 12;
			g.rotate(angle, i * 24 + 18, 25);// 控制旋转,angle为旋转角度,后面两个参数用来指定旋转中心
			g.drawString(c + "", i * 22 + 10, 15);
			g.rotate(-angle, i * 24 + 18, 25);// 再转回去
		}
		System.out.println(sb.toString());
		// 生成的图片与src在同一目录
		ImageIO.write(image, "png", new File(UUID.randomUUID() + ".png"));
	}
}

结束语:事件编程的重点就是实现事件处理器,重点就是实现事件的处理方法。有关Java中的界面编程就讲到这,内容很多,不可能面面俱到,而且JavaSE中的界面等学了Java web后基本不用,而且安卓的界面更有优势,所以JavaSE中的界面编程就将这些,了解一些常用的组件即可,不必死记。明天开始讲Java中的感觉非常有用的部分——线程。

 

 

分享到:
评论

相关推荐

    Java面向对象软件开发

    1-面向对象软件开发概述;2-Java语言概述;3-java语言基础;4-面向对象程序设计1;5-面向对象程序设计2;6-工具类与算法;7-图形用户界面设计与实现;8-Java高级编程1(异常处理);8-Java高级编程2(多线程);8-Java高级...

    Java与UML面向对象程序设计.pdf

    第5章使用这些面向对象观点分析了图形用户界面(GUI)和Java Swing类库。第6章以一个小规模的Java应用程序为实例,将前5章的内容结合到一起。 接下来的章节让您对面向对象编程的实践方面有较好的了解。第7章介绍了...

    java面向对象程序设计习题集

    第六章 面向对象程序设计 97 一、选择题 97 二、填空题 118 三、判断题 120 四、编程题 123 第七章 数据库的连接 129 一、选择题 129 二、填空题 131 三、判断题 131 四、编程题 131 第八章 多线程 133 一、填空题 ...

    Java面向对象程序设计:第2版:英文

    全书共12章,内容包括面向对象程序设计概述,Java语言概述,Java语言基础,类、对象和接口,包和Java基础类,Java异常处理,Java图形用户界面设计,Applet及其应用,I/O系统,多线程编程,多媒体编程和网络编程等。

    精通Java:JDK、数据库系统开发Web开发(实例代码)

    第5章 Java面向对象程序设计(上) 第6章 Java面向对象程序设计(下) 第7章 Java异常处理机制 第8章 Java反射机制 第9章 数据结构与集合类 第3篇 图形用户界面 第10章 Java Swing(上) 第11章 Java Swing(下) 第...

    完整版 杭州电子科技大学JAVA语言程序设计 JAVA_08 AWT图形界面编程 JFC Swing (共22页).ppt

    完整版 杭州电子科技大学JAVA语言程序设计 JAVA_04 Java面向对象特性(共41页).ppt 完整版 杭州电子科技大学JAVA语言程序设计 JAVA_05 高级语言特征(共65页).ppt 完整版 杭州电子科技大学JAVA语言程序设计 JAVA_...

    完整版 Java编程基础入门教程 Java语言程序设计 第3章_面向对象程序设计基础(共16页).ppt

    完整版 Java编程基础入门教程 Java语言程序设计 第3章_面向对象程序设计基础(共16页).ppt 完整版 Java编程基础入门教程 Java语言程序设计 第4章_类与对象(共59页).ppt 完整版 Java编程基础入门教程 Java语言程序...

    完整版 Java编程基础入门教程 Java语言程序设计 第1章_java概述(共50页).ppt

    完整版 Java编程基础入门教程 Java语言程序设计 第3章_面向对象程序设计基础(共16页).ppt 完整版 Java编程基础入门教程 Java语言程序设计 第4章_类与对象(共59页).ppt 完整版 Java编程基础入门教程 Java语言程序...

    java学习笔记

    java面向对象编程--数据库编程--&gt;java se java 基础2 html--css--javascript--&gt;div+css java ee中级部分 Servlet--Jsp--&gt;mvc模式 java ee高级部分 Struts--Ejb--Hibernate--Spring--Ajax(ext,dw2)--&gt;...

    Java初学者很好的参照实例 面向对象编程 异常处理 图形化界面的搭建 多类程序

    本Java程序实例包中包含的内容有: 1、加减法的四则运算的图形化界面设计 2、随机数的生成,并对生成的随机数进行求和运算,及本程序的图形界面搭建,包括对话框,文本域,Button,Label等组件的使用; 3、三角形,...

    Java编程游戏开发,面向对象编程(OOP)

    这个Java贪吃蛇游戏源码可以用于学习和理解Java编程语言、程序设计、面向对象编程以及游戏开发的相关知识。通过阅读和理解这个源码,您可以学习到如何使用Java语言和GUI框架来实现一个简单的游戏,以及如何处理游戏...

    java面向对象

    《Java面向对象程序设计》通过丰富、实用的精选实例系统地介绍了使用Java语言进行面向对象程序设计的方法和技术,注重提高读者运用Java语言和面向对象技术解决实际问题的能力。全书共12章,内容包括面向对象程序设计...

    Java基础入门学习教程PPT课件 JAVA语言程序设计 JAVA_03 JAVA语言基础 位运算(共21页).ppt

    JAVA_4 Java面向对象特性 JAVA_5 高级语言特征 JAVA_6 异常处理Exceptions JAVA_7 IO输入输出 JAVA_8 AWT图形界面编程 JFC AWT Swing JAVA_8 AWT图形界面编程 JFC Swing JAVA_9 Applet JAVA_10 线程 JAVA_11 网络...

    corejava,java核心编程

    java语法基础,java面向对象编程,图形用户界面(GUI)编程 Java 网络编程:Socket编程

    Java高手真经(编程基础卷)光盘全部源码 免积分

    javaexception.zip 07.Java面向对象编程扩展(计算器异常捕捉实例) 第3部分(5个程序包) javaio.zip 09.Java输入/输出流 javavi.zip 09.Java输入/输出流上机作业参考(文本编辑器) javathread.zip 10.Java多...

    JAVA编程技术

    本书是一本适合大专本科院校学生学习Java语言以及编写Java应用程序的实用型教科书或教学参考书,主要阐述了Java语言的关键字、语句、语法规则、类库等的使用方法,其内容主要包括Java语言开发工具的介绍、面向对象...

    JAVA面向对象程序设计课件

    第01章-Java语言概述 第02章-Java语法基础 第03章-面向对象特征 第04章-Applet及其应用 第05章-图形用户界面设计 第06章-异常处理 第07章-线程 第08章-集合 第09章-文件输入输出 第10章-网络编程

    完整版 Java编程基础入门教程 Java语言程序设计 第6章_图形用户界面设计(共97页).ppt

    完整版 Java编程基础入门教程 Java语言程序设计 第3章_面向对象程序设计基础(共16页).ppt 完整版 Java编程基础入门教程 Java语言程序设计 第4章_类与对象(共59页).ppt 完整版 Java编程基础入门教程 Java语言程序...

    java 核心编程 java

    下面是本卷详细介绍的主要内容: Java语言基础知识面向对象程序设计接口与内部类事件监听器模型 Swing图形用户界面程序设计打包应用程序异常处理登陆与调试泛型化程序设计集合框架多线程... 【作译者介绍】 本书提供...

Global site tag (gtag.js) - Google Analytics