- 浏览: 403713 次
- 性别:
- 来自: 秦皇岛
最新评论
-
prayjourney:
了解了,讲的不错
DataInputStream和DataOutputStream类 -
niunianss:
将字节退回的时候,需要添加判断,最后一个字符是英文时,实际数组 ...
PushbackInputStream -
cctt_1:
不要误人子弟,那根本就不是 解释器模式!!!那是Composi ...
Interpreter(解释器)模式 -
java-大神:
[i][i]引用引用引用引用[/img][/img][/img ...
BufferedReader和BufferedWriter -
百合不是茶:
你的程序在文件输入输出流中传入agrs[0]时,会报错越界 ...
DataInputStream和DataOutputStream类
1. Swing入门:
若要使用J2SE来开发窗口应用程序,可以有两种选择:一个是使用AWT(Abstract Window Toolkit),另一个是使用JFC(Java Foundation Classes)/Swing。
2. Swing简介:
每一个窗口上所出现的组件在J2SE中,都是java.awt.Component或是java.awt.MenuCompoment的子类,Component是按钮(Button)、标签(Label)、文字编辑组件(TextComponent)等类的父类,而MenuComponent则是菜单栏(MenuBar)、菜单项目(MenuItem)等的父类。
3 . Component继承体系:
Component继承体系下最重要的一个子类就是java.awt.Container类,Container类可以容纳其他的Component在它之中,当然也可以容纳其他的Container。由此组合成更复杂的窗口画面。在J2SE中,Container有两个主要的子类:java.awt.Window与java.awt.Panel。
Window类的实例是一个可以独立存在的窗口,它包括两个重要的类:java.awt.Dialog与java.awt.Frame。Dialog可以在屏幕上显示一个简单的对话框,没有工具栏,也不能改变它的大小。Frame则是一个具有标题栏、工具栏且可以改变大小的窗口组件。
Panel类的实例必须被容纳在其他的Container之中,或是内嵌于浏览器之中。可以在Panel中放入组件,甚至其他的Container,通过嵌套的组成方式来组合出复杂的窗口,最后可以将Panel设定至Window类的实例之中来显示窗口组件。
下面简单列出Component的继承体系:
java.awt.Conponent
java.awt.Container
java.awt.Panel
java.applet.Applet
java.awt.Window
java.awt.Dialog
java.awt.Frame
java.awt.Button
java.awt.CheckBox
java.awt.Label
java.awt.List
java.awt.TextComponent
java.awt.MenuComponent
java.awt.MenuBar
java.awt.MenuItem
java.awt.menu
4. Swing继承体系:
AWT提供基本的使用者图形接口组件。可以仅基于AWT来建立窗口程序,然而AWT所开发出来的窗口程序,在不同的平台上会呈现不同的外观。
Swing是以AWT为基础所提出的组件,使用它所开发出来的窗口组件,在不同的平台上会有一致的观感。由于Swing是以AWT为基础,所以了解AWT组件的继承体系是必要的。下面列出Swing组件的继承体系:
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JPanel
javax.swing.JTextComponent
java.awt.Window
javax.swing.JWindow
javax.awt.Dialog
javax.swing.JDialog
javax.awt.Frame
javax.swing.JFrame
从继承体系可以看出,无论是AWT还是Swing,最顶层都是Component与Container,所以在Java中关于窗口组件的编写,都与组件及容器的概念息息相关。容器是一种窗口组件,可以包括其他的窗口组件与容器,因而可以嵌套地组合下去,形成所想要的窗口画面。
5.设计主窗口与菜单栏:
(1)主窗口:
可以继承javax.swing.JFrame来编写一个可以呈现在屏幕上的窗口,最基本的动作包括:设定窗口组件、设定事件处理、呈现画面。下面范例示范了如何呈现一个基本的Swing窗口。
package ysu.hxy; import javax.swing.JFrame; public class JNotePadUI extends JFrame { public JNotePadUI() { super("新建文本文件"); setUpUIComponent(); setUpEventListener(); setVisible(true); //显示窗口 } //窗口组件的设置 private void setUpUIComponent() { setSize(640,480); } //事件的处理 private void setUpEventListener() { //单击右上角X按钮后直接结束程序,默认是HIDE_ON_CLOSE setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new JNotePadUI(); } }
(2)菜单栏:
在Swing中,菜单元件被抽象化为按钮的一种。与菜单相关的3个组件为菜单栏(Menu Bar)、菜单项(Menu Item)与菜单(Menu)。先来看看它们的继承架构:
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JMenuBar
javax.swing.AbstractButton
javax.swing.JMenuItem
javax.swing.JMenu
JMenuBar用来建立菜单栏,JMenu要被加入菜单栏之中,JMenu是JMenuItem的子类,JMenu中可以再包括JMenuItem,即每个菜单中再包括菜单项。可以使用如下的程序片段来示范如何建立菜单栏、菜单与菜单项:
//菜单栏 JMenuBar menuBar = new JMenuBar(); //菜单 JMenu fileMenu = new JMenu("文件"); //菜单项 JMenuItem menuOpen = new JMenuItem("打开"); //在JMenu中加入JMenuItem fileMenu.add(menuOpen); //将JMenu加入JMenuBar; menuBar.add(fileMenu); //使用JFrame的setMenuBar设置菜单栏 setManuBar(menuBar);
可以通过JMenuItem的setAccelerator()方法来设置。例如要求按下Ctrl+O组合键时执行菜单项,则可以如下编写:
menuOpen.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
可以使用JMenu的addSeperator()方法在菜单项与菜单项之间加入分隔线:
fileMenu.addSeparator();
加入菜单栏后的程序如下:
package ysu.hxy; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.KeyStroke; public class JNotePadUI extends JFrame { public JNotePadUI() { super("新建文本文件"); setUpUIComponent(); setUpEventListener(); setVisible(true); } private void setUpUIComponent() { setSize(640,480); //菜单栏 JMenuBar menuBar = new JMenuBar(); //设置"文件"菜单 JMenu fileMenu = new JMenu(); JMenuItem menuOpen = new JMenuItem("打开"); //快捷键设置 menuOpen.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK)); JMenuItem menuSave = new JMenuItem("保存"); menuSave.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); JMenuItem menuSaveAs = new JMenuItem("另存为"); JMenuItem menuClose = new JMenuItem("关闭"); menuClose.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_Q,InputEvent.CTRL_MASK)); fileMenu.add(menuOpen); //添加分隔线 fileMenu.addSeparator(); fileMenu.add(menuSave); fileMenu.add(menuSaveAs); //添加分隔线 fileMenu.addSeparator(); fileMenu.add(menuClose); //设置"编辑"菜单 JMenu editMenu = new JMenu("编辑"); JMenuItem menuCut = new JMenuItem("剪切"); menuCut.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK)); JMenuItem menuCopy = new JMenuItem("复制"); menuCopy.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); JMenuItem menuPaste = new JMenuItem("粘贴"); menuCopy.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK)); editMenu.add(menuCut); editMenu.add(menuCopy); editMenu.add(menuPaste); //设置"关于"菜单 JMenu aboutMenu = new JMenu("关于"); JMenuItem menuAbout = new JMenuItem("关于JNotePad"); aboutMenu.add(menuAbout); menuBar.add(fileMenu); menuBar.add(editMenu); menuBar.add(aboutMenu); //设置菜单栏 setJMenuBar(menuBar); } private void setUpEventListener() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new JNotePadUI(); } }
(3)版面管理:
在Container中,组件的位置和大小是由版面管理器(Layout Manager)来决定,当Container需要决定它当中的组件的大小或位置时,就会调用版面管理器来为其执行。
* JTextArea与JScrollPane
前者没有滚动条,对于编辑或浏览都不方便,可以在JTextArea上加上一个javax.swing.JScrollPane,JScrollPane会检验JTextArea的文字内容,在必要的时候显示滚动条,或者在操作滚动条时,对JTextArea进行相应的位置显示。以下是结合JTextArea、JScrollPane以建立文字编辑区域的程序代码片段:
JTextArea textArea = new JtextArea(); textArea.setFont(new Font("宋体",Font.PLAIN,16)); textArea.setLineWrap(true); JScrollPane panel = new JScrollPane(textArea, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
JSCrollPane所采取的版面管理策略默认是ScrollPaneLayout,默认的行为是将JTextArea填满整个JScrollPane。所以即使没有指定JTextArea的大小及位置,等会儿的执行画面中,将看到文字区域占满了窗口的中央。
*ContentPane
设置好JScrollPane之后,接下来要将它加入JFrame中。Swing窗口包括了几个层次:RootPane、LayoutPane、ContentPane、MenuBar、GlassPane。由前而后每个层次都包括管理了下一个层次,在最底层-的是RootPane,最上层的是GlassPane。ContentPane与MenuBar位于同一个层次,在这个层次中如果具有ManuBar,也就是若包括菜单栏,则ContentPane的大小为LayoutPane的大小减去菜单栏的大小,否则由ContentPane占有全部的大小。基本上,窗口组件是加入至ContentPane中。在JFrame中要取得ContentPane,可以使用继承下来的getContentPane()方法。例如:
Containter contentPane = getContentPane(); ContentPane.add(panel,BorderLayout.CENTER);
在取得ContentPane之后,可以使用add()方法将组件加入其中,ContentPane默认使用BorderLayout,将可容纳的区域分为东、西、南、北、中5个区域。在绘制组件位置时,BorderLayout会先由北至南绘制,接着由西至东绘制,在不干扰至其他位置的情况下尽可能填满位置。
*JLabel
制作状态栏,可以使用以下的程序代码片段来制作并加入至ContentPane中:
//状态栏 JLabel stateBar = new JLabel("未修改"); statebar.setHorizontalAlignment(SwingConstants.LEFT); //文字靠左显示 stateBar.setBorder(BorderFactory.createEtchedBorder()); //JLabel的蚀刻外观边界 ContentPane.add(stateBar,BorderLayout.SOUTH); //将Label实例加入到ContentPane,并设置在BorderLayout的南方
加入文字编辑区域的代码如下:
package ysu.hxy; import java.awt.BorderLayout; import java.awt.Container; import java.awt.Font; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import javax.swing.BorderFactory; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.ScrollPaneConstants; import javax.swing.SwingConstants; import javax.swing.KeyStroke; public class JNotePadUI extends JFrame { public JNotePadUI() { super("新建文本文件"); setUpUIComponent(); setUpEventListener(); setVisible(true); } private void setUpUIComponent() { setSize(640,480); //菜单栏 JMenuBar menuBar = new JMenuBar(); //设置"文件"菜单 JMenu fileMenu = new JMenu(); JMenuItem menuOpen = new JMenuItem("打开"); //快捷键设置 menuOpen.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK)); JMenuItem menuSave = new JMenuItem("保存"); menuSave.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); JMenuItem menuSaveAs = new JMenuItem("另存为"); JMenuItem menuClose = new JMenuItem("关闭"); menuClose.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_Q,InputEvent.CTRL_MASK)); fileMenu.add(menuOpen); //添加分隔线 fileMenu.addSeparator(); fileMenu.add(menuSave); fileMenu.add(menuSaveAs); //添加分隔线 fileMenu.addSeparator(); fileMenu.add(menuClose); //设置"编辑"菜单 JMenu editMenu = new JMenu("编辑"); JMenuItem menuCut = new JMenuItem("剪切"); menuCut.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK)); JMenuItem menuCopy = new JMenuItem("复制"); menuCopy.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); JMenuItem menuPaste = new JMenuItem("粘贴"); menuCopy.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK)); editMenu.add(menuCut); editMenu.add(menuCopy); editMenu.add(menuPaste); //设置"关于"菜单 JMenu aboutMenu = new JMenu("关于"); JMenuItem menuAbout = new JMenuItem("关于JNotePad"); aboutMenu.add(menuAbout); menuBar.add(fileMenu); menuBar.add(editMenu); menuBar.add(aboutMenu); //设置菜单栏 setJMenuBar(menuBar); //文字编辑区域 JTextArea textArea = new JTextArea(); textArea.setFont(new Font("宋体",Font.PLAIN,16)); textArea.setLineWrap(true); JScrollPane panel = new JScrollPane(textArea, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); Container contentPane = getContentPane(); contentPane.add(panel,BorderLayout.CENTER); //状态栏 JLabel stateBar = new JLabel("未修改"); stateBar.setHorizontalAlignment(SwingConstants.LEFT); stateBar.setBorder(BorderFactory.createEtchedBorder()); contentPane.add(stateBar,BorderLayout.SOUTH); } private void setUpEventListener() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new JNotePadUI(); } }
发表评论
-
内部类总结
2009-11-27 14:28 1180一、方法及作用域内的内部类:1.在一个方法内定义的类2.在一个 ... -
finalize()方法终结条件验证 示例代码
2009-09-20 09:23 1296package Initialization; clas ... -
Proxy(代理)模式二
2009-05-15 21:16 15182. 重新思考图像代理: 现在需要思考设计模式是否 ... -
Junit简介
2009-04-08 17:46 15531. 单元测试(Unit Test) 一个单元(Un ... -
Ant简介
2009-04-08 13:10 17411. Ant可以自动完成的任务: (1)编译Java源代 ... -
专题制作--文字编辑器(文字编辑与保存)
2009-04-08 10:43 21491. 文字编辑与保存: (1). 打开文件的处理流 ... -
专题制作--文字编辑器(逻辑实现部分)
2009-04-07 22:35 18541. 事件处理: 在Java中事件以具体的对象来表 ... -
信息绑定(国际化处理)
2009-04-07 20:02 15301. 程序中的一些文字信息可以将之定义在一个属性文件中,而不定 ... -
日志(Logging)
2009-04-07 16:14 16221. 日志(Logging) 程序不免会出现错误,当 ... -
Java中的日期和时间
2009-04-07 11:26 19121. 使用Date: 使用System.cu ... -
meta-annotation
2009-04-07 09:23 30171. 所谓meta-annotation就是Annotati ... -
Annotion
2009-04-06 23:05 16361. Annotation对程序运行没有影响,它的目的在于对编 ... -
使用反射生成与操作对象(二)
2009-04-06 17:04 17231. 修改成员值: 尽管直接存取类的域成员是不被鼓励的 ... -
使用反射生成与操作对象(一)
2009-04-06 15:16 20511. 使用反射机制,可以在运行时期动态加载类并生成对象,操作对 ... -
Java中的反射(二)
2009-04-06 10:42 19801. 当在命令行模式下执行java XXX.class 指令后 ... -
Java中的反射(一)
2009-04-06 09:43 12931. Java提供的反射机制允许您在运行时动态加载类、查看类信 ... -
容器类的线程安全及ThreadLocal类
2009-04-05 21:28 30161. 容器类默认没有考虑 ... -
wait()和notify()
2009-04-05 19:06 13231. wait()、notify()、notifyAll() ... -
Java线程之同步化(Synchronized)主题
2009-04-05 16:44 26761. 如果一个对象所持有的数据可以被多线程同时共享存取,必须 ... -
Java线程(三)
2009-04-05 15:37 18531. Java中的每个线程都 ...
相关推荐
Unity编辑器扩展---动画事件编辑器(仿UE4动画事件编辑器) Unity编辑器扩展---动画事件编辑器(仿UE4动画事件编辑器) Unity编辑器扩展---动画事件编辑器(仿UE4动画事件编辑器) Unity编辑器扩展---动画事件编辑器...
使用vue.js和element-ui实现的网页版的JSON编辑器,使用之前需要安装NODE.js和npm
-QT(文本编辑器的开发) -QT(文本编辑器的开发) -QT(文本编辑器的开发) -QT(文本编辑器的开发) 非常好用的ppt
FCKeditor是一个专门使用在网页上属于开放源代码的所见即所得文字编辑器。它志于轻量化,不需要太复杂的安装步骤即可使用。它可和PHP、JavaScript、ASP、ASP.NET、ColdFusion、Java、以及 ABAP等不同的编程语言相...
C语言开发----c语言文本编辑器系统源码
jquery editable plugin--点击编辑文字插件
richeditor-android富文本编辑器.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
良葛格Java JDK 5.0 学习笔记 - 文字编辑器制作
fckeditor-java-2.5-src.zip编辑器(源码+DEMO) fckeditor-java-2.5-src.zip编辑器(源码+DEMO) fckeditor-java-2.5-src.zip编辑器(源码+DEMO) fckeditor-java-2.5-src.zip编辑器(源码+DEMO) fckeditor-java-...
Exa2-文本编辑器.zipExa2-文本编辑器.zipExa2-文本编辑器.zipExa2-文本编辑器.zipExa2-文本编辑器.zipExa2-文本编辑器.zipExa2-文本编辑器.zipExa2-文本编辑器.zipExa2-文本编辑器.zipExa2-文本编辑器.zipExa2-文本...
WinHEX-17.3十六位编辑器
ueditor富文本编辑器实例----写了一个简单的ueditor富文本编辑器实例,toolbar采用的是它默认的;另一个ueditor富文本编辑器实例是对toolbar进行自定义的实例!
电信设备-一种文字编辑方法、装置及移动终端.zip
自己写的一个文字冒险引擎的编辑器。
为满足电子病历评级和信息化建设的需求,HC编辑器将作者2009年至今电子病历系统和编辑器的开发经验完全发挥和体现,使HC编辑器天生就带有电子病历的血统。 HC编辑器目前一共有4种开发语言的代码,适合各种技术和...
HTMLArea-免费在线定制编辑器小工具,是网页开发过程中良师益友
XChange编辑器增强版本,无任何功能限制,专注于PDF电子文档的编辑功能,试用后发现它体积小巧,速度飞快,界面友好,具备丰富的配置和功能选项,而且非常简单易用,可帮助你快速的制作和编写PDF电子文档,需要的...
tiled-0.7.2-bin地图编辑器.zip
Cursor 是一款集成了 GPT-4 的代码编辑器,通过人工智能技术辅助程序员进行日常的编码,支持 Windows、Linux 和 macOS
HH8-Wil编辑器Ver3.2正式版