`
xyheqhd888
  • 浏览: 409240 次
  • 性别: Icon_minigender_1
  • 来自: 秦皇岛
社区版块
存档分类
最新评论

专题制作--文字编辑器(接口部分)

阅读更多

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.Windowjava.awt.Panel

     Window类的实例是一个可以独立存在的窗口,它包括两个重要的类:java.awt.Dialogjava.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要被加入菜单栏之中,JMenuJMenuItem的子类,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();
	}
}

 

 

         

 

分享到:
评论

相关推荐

    Unity编辑器扩展---动画事件编辑器

    Unity编辑器扩展---动画事件编辑器(仿UE4动画事件编辑器) Unity编辑器扩展---动画事件编辑器(仿UE4动画事件编辑器) Unity编辑器扩展---动画事件编辑器(仿UE4动画事件编辑器) Unity编辑器扩展---动画事件编辑器...

    Jp-word2.0简谱编辑器(可保存文件)

    关键是破解的版本,唯一网上可以保存制作后的简谱文件的音乐软件。JP-Word是一款简谱编辑软件,它的特点是体积小巧,输入便捷,所见即所得,音符的排版格式极为灵活,文本与乐谱可以混合排版,乐谱的字体可以有多种...

    FCKeditor-2.6.6 php HTML编辑器(附带图文安装)

    FCKeditor是一个专门使用在网页上属于开放源代码的所见即所得文字编辑器。它志于轻量化,不需要太复杂的安装步骤即可使用。它可和PHP、JavaScript、ASP、ASP.NET、ColdFusion、Java、以及 ABAP等不同的编程语言相...

    ArcGIS专题图制作-人口空间分布专题图(详细技术文档与录屏)

    在本资源中,"ArcGIS专题图制作-人口空间分布专题图(详细技术文档与录屏)"提供了全面的学习材料,旨在帮助初学者掌握如何利用ArcGIS软件进行人口空间分布的专题图绘制。ArcGIS是一款强大的地理信息系统(GIS),...

    [GOM引擎]PAK-WIL补丁编辑器

    GOM引擎素材资源编辑器(WIL,WIS,PAK)素材编辑工具..新手可能还不了解这个工具,如果想提取添加素材什么的,也是用这个工具,如果不会用的话,到教程区找到,每个补丁代码代表是什么内容..比如Mon83.Pak代表是的怪物...

    HH8-Wil编辑器Ver3.2正式版

    HH8-Wil编辑器Ver3.2正式版

    TRS-wcm-DW模板编辑器选件

    DW模板编辑器选件作为这个系统的一部分,主要服务于TRS-wcm的模板设计环节。 在使用DW模板编辑器选件时,用户可以利用其丰富的编辑功能,轻松创建符合业务需求的HTML模板。这些模板可以预先设定好布局、样式和动态...

    cocos2d-x开发自己的编辑器

    而"开发自己的编辑器"这一主题,则是关于如何利用cocos2d-x构建自定义的游戏编辑工具,以提升开发效率和个性化需求。 首先,我们需要理解一个游戏编辑器的作用。编辑器是用于创建、编辑和管理游戏资源的工具,包括...

    pdf-xchangeeditor(pdf编辑器)v7.0.328.0官方英文安装版

    XChange编辑器增强版本,无任何功能限制,专注于PDF电子文档的编辑功能,试用后发现它体积小巧,速度飞快,界面友好,具备丰富的配置和功能选项,而且非常简单易用,可帮助你快速的制作和编写PDF电子文档,需要的...

    cocos2d-x动作编辑器

    动作编辑器是这个框架的一个重要组成部分,它提升了2D游戏开发的效率,尤其是对于那些需要复杂动画效果的游戏。 在描述中提到的“类似J2ME用到的spriteX”,这里可能是指SpriteX是一个在Java ME(Java Micro ...

    富文本编辑器(可以同时添加文字和图片)

    【富文本编辑器:结合文字与图片的编辑工具】 富文本编辑器是一种允许用户在文本中插入、编辑和格式化文字以及图片的交互式编辑工具。在移动应用开发,特别是Android平台,这样的编辑器功能非常实用,因为它为用户...

    带图片上传的文本编辑器源码

    - **编辑器**:这是软件的核心部分,提供了一个可视化的环境,让用户可以像在Word中一样编辑和排版内容。 - **源码**:编辑器的源代码是开放的,用户或开发者可以直接查看和修改代码,以适应特定的需求。 - **上传**...

    文字制作铃声

    总结,从文字制作铃声到读取文字播放,背后的技术涉及到了文本处理、语音合成和音频编辑等多个领域。掌握这些技术,不仅可以帮助我们创建独特的手机铃声,也为其他相关应用的开发提供了基础。无论是对于个人娱乐还是...

    PDF编辑器(PDF编辑工具)v1.0.3绿色版

    PDF编辑器是一款PDF编辑工具软件,它支持修改编辑PDF文件并向PDF添加文字、擦除内容、插入图片、绘制直线、加椭圆框、加矩形框和旋转PDF等功能。PDF编辑器可以让您在PDF文件的任何位置添加文字、删除内容、加图片或...

    专题讲座2021-2022年可编辑公章模板.doc

    总之,"专题讲座2021-2022年可编辑公章模板.doc" 是一个实用的教育工具,它简化了公章制作的过程,使教育工作者能快速、方便地制作出符合规范的公章,从而专注于更重要的教学工作。同时,这也反映了信息技术在日常...

    乐都WIL编辑器3.2版 编辑传奇客户端图片

    乐都WIL编辑器3.2版是一款专为传奇客户端设计的图像编辑工具,它提供了丰富的功能,使得传奇游戏的图像资源编辑变得更加便捷和高效。在这个版本中,开发者可能已经优化了用户界面,增强了工具的稳定性和兼容性,旨在...

    ueditor1_2_4_0-utf8-asp 百度编辑器asp版

    该编辑器不仅提供了基本的文字编辑功能,如字体调整、颜色设置、段落排版等,还支持图片上传、视频插入、表格制作等多种富媒体处理能力,极大地丰富了网页内容的表现形式。 一、ueditor概述 ueditor是百度公司推出...

    Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义

    在JS部分,我们定义了编辑器的选项`editorOption`,包括工具栏配置`toolbarOptions`,以及图片按钮的处理函数。当点击“图片”按钮时,触发输入框选择图片文件: ```javascript export default { data() { ...

    cocos2dx 粒子编辑器

    5. **兼容V-Play**:V-Play是一个基于Cocos2d-x的游戏开发框架,适用于Qt环境,所以这个编辑器也可能支持V-Play项目的粒子效果制作。 通过深入学习和熟练掌握Cocos2d-x粒子编辑器,开发者能够更高效地创造出吸引人...

    rc 资源编辑器-用于可视化编辑资源文件

    rc资源编辑器能够编辑rc资源文件.且是可视化编辑...........非常好用

Global site tag (gtag.js) - Google Analytics