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中的感觉非常有用的部分——线程。
相关推荐
第17章提供了一个面向对象图形用户界面编程的概览,涉及到三种不同的工具包。 第18章深入探讨了面向对象的多线程编程,这是现代编程中的一个重要主题,特别是对于需要并发执行的任务。 第19章讨论了网络编程,即...
Java面向对象程序设计是编程领域中的核心概念,它基于面向对象的编程思想,将现实世界中的实体抽象为类,通过类来创建对象,实现代码的复用和模块化。在这个期末考试试题中,我们看到了一系列关于Java编程的问题,...
"JAVA面向对象编程(孙卫琴)_5java继承.doc"涉及Java的面向对象特性之一——继承。继承允许子类从父类中继承属性和方法,增强了代码的复用性和扩展性。同时,它还介绍了多态和抽象类的概念。 "JAVA面向对象编程...
1-面向对象软件开发概述;2-Java语言概述;3-java语言基础;4-面向对象程序设计1;5-面向对象程序设计2;6-工具类与算法;7-图形用户界面设计与实现;8-Java高级编程1(异常处理);8-Java高级编程2(多线程);8-Java高级...
综上所述,Java面向对象应用程序开发涵盖了从语言基础、面向对象编程原理到实际应用开发的全过程。掌握这些知识,将使开发者能够创建高效、可靠且易于维护的Java应用程序。通过深入学习和实践,开发者可以不断提升...
第5章使用这些面向对象观点分析了图形用户界面(GUI)和Java Swing类库。第6章以一个小规模的Java应用程序为实例,将前5章的内容结合到一起。 接下来的章节让您对面向对象编程的实践方面有较好的了解。第7章介绍了...
Java 面向对象程序设计(董小园版)收集.pdf ...本书是学习 Java 面向对象程序设计的优秀资源,涵盖了面向对象的基本概念、对象的属性和行为、继承和多态、异常处理、图形界面编程和多线程机制等方面的知识。
Java面向对象编程是一种重要的软件开发方法,它基于“对象”的概念,强调数据和操作数据的方法紧密结合,使得代码更易于理解和维护。在这个名为“Java面向对象五子棋”的项目中,我们有两个使用Java实现的五子棋小...
Java面向对象编程是Java语言的核心特性,它基于面向对象编程思想,使得代码更易于理解和维护。孙卫琴老师的《深入浅出Java面向对象》是一本深受程序员喜爱的教材,其中的课后习题旨在帮助学生深入理解面向对象的原理...
在这个“java面向对象游戏”的项目中,我们看到开发者使用了Java OOP思想来实现一个猜拳游戏,这为初学者提供了一个很好的实践案例,帮助他们深入理解面向对象编程的概念。 面向对象编程的核心思想是将复杂的问题...
《面向对象程序设计JAVA语言程序设计》涵盖了 Java 语言的基础知识点、设计原则、编程风格、多线程和并发、网络和 Web 编程、异常处理、安全和可靠性、Applet 和应用程序、设计模式、测试和调试等多方面的内容。
在Java面向对象程序设计实验课的学习过程中,我深入体验了Java语言的强大特性和它在软件开发中的重要地位。Java作为一种面向对象的语言,它的核心概念包括抽象、封装、继承和多态,这些特性使得Java在软件工程中具有...
Java面向对象程序设计 Java面向对象程序设计是一本由莫雷利、王尔德合著的图书,出版于2008年 oleh 清华大学出版社。该书全面系统地讲述了Java语言的面向对象程序设计,涵盖了Java语言的基础知识、基本语法、编程...
Java Swing电子相册管理系统是一个基于面向对象思想...通过这个项目,开发者不仅可以提升Java Swing GUI编程技能,还能深入理解面向对象编程的原理和实践,同时学习如何组织和优化代码结构,以实现功能丰富的桌面应用。
总之,这个Java游戏项目压缩包提供了一个极好的机会,让你在实践中学习和巩固Java编程知识,特别是面向对象编程技术。通过完成这些项目,你不仅能够提高编程技能,还能体验到编程的乐趣。在每个项目中,你都会遇到新...
### JAVA面向对象编程入门课程标准知识点解析 #### 一、课程背景与意义 - **Java语言**: 当前非常流行的网络编程语言之一。 - **面向对象编程(OOP)**: Java的核心特性之一,通过类和对象的概念来组织代码。 - **...
全书共12章,内容包括面向对象程序设计概述,Java语言概述,Java语言基础,类、对象和接口,包和Java基础类,Java异常处理,Java图形用户界面设计,Applet及其应用,I/O系统,多线程编程,多媒体编程和网络编程等。
《Java语言与面向对象程序设计(第2版)》是一本深入探讨Java编程语言和面向对象设计理念的教材,特别适合初学者和有一定基础的学习者。本课程的重点在于理解和掌握Java的核心概念,以及如何利用这些概念进行高效的...