快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

下载和记娱乐app_蓝莲花网进入



一、概述

文本编辑器是一种最常用的利用法度榜样,下面我们使用Jbuilder 9集成开拓情况,用java说话实现一个简单的文本编辑器。该文本编辑用具有读出、写入、编辑文本文件,可以设定翰墨颜色、字形和编辑区域背景颜色等基础功能。

我们首先经由过程Jbuilder 9项目领导和利用领导创建项目,然后利用可视化设计对象,改动UI设计,连接事故,编辑源码以及常用控件和义务诸如菜单项、对象条、文本区域和系统事故等常用控件和义务的处置惩罚。涉及到详细技巧有:

用JFileChooser 对话框让用户选择文本文件。

用JtextArea读、写和处置惩罚文本文件中的翰墨。

设置前景致和背景致。

用dbSwing FontChooser对话框设置字型。

在状态栏和窗口标题栏显示信息。

手工添加处置惩罚UI事故的代码 。

经由过程将代码放在一个可被菜单项和按钮两个事故处置惩罚器调用的新的"赞助"措施中, 使得菜单项和按钮履行相同的代码。

给JtextArea控件增添一个右击菜单。

维持对文件的位置以及文件是否活动过的跟踪,展示对文件|新建, 文件|打开, 文件|保存, 文件|另存为,编辑和退出等逻辑的处置惩罚。

将"Text Editor" 利用法度榜样展开为JAR 文件。

二、开拓文本编辑器java源法度榜样阐明

文本编辑器法度榜样包孕三个java 源法度榜样即TextEditFrame.java、TextEditclass.java 和TextEditFrame_AboutBox.java 法度榜样,下面将分手先容如下:

1、TextEditFrame.java的源法度榜样代码(节选部分):

package texteditor;

//TextEditFrame.java

import java.awt.*;//导入类

import java.awt.event.*;

import javax.swing.*;

import com.borland.dbswing.*;

import java.io.*;

import javax.swing.text.*;

import javax.swing.event.*;

public class TextEditFrame extends JFrame {

IntlSwingSupport intlSwingSupport1 = new IntlSwingSupport();

//Swing 控件互联网化:即本地化利用法度榜样,必要添加一行代码以便Swing 控件JfileChooser //和JcolorChooser呈现在法度榜样运行的说话中

JPanel contentPane; //设置内容窗(contentPane)的JPanel控件

JMenuBar menuBar1 = new JMenuBar();//创建菜单条并加入到框架窗体中

JMenu menuFile = new JMenu();//创建File菜单和响应的菜单项

JMenuItem menuFileExit = new JMenuItem();

JMenu menuHelp = new JMenu();//创建Help菜单和响应的菜单项

JMenuItem menuHelpAbout = new JMenuItem();

JToolBar toolBar = new JToolBar();//创建对象条组件

JButton jButton1 = new JButton();//创建按钮组件

JButton jButton2 = new JButton();

JButton jButton3 = new JButton();

ImageIcon image1;//定义图标

ImageIcon image2;

ImageIcon image3;

JLabel statusBar = new JLabel();//创建标签组件

BorderLayout borderLayout1 = new BorderLayout();//创建BorderLayout 结构器

JScrollPane jScrollPane1 = new JScrollPane();//创建滚动窗控件

JTextArea jTextArea1 = new JTextArea();//创建多行文本域组件

JMenuItem jMenuItem1 = new JMenuItem();//创建菜单项

JMenuItem jMenuItem2 = new JMenuItem();

JMenuItem jMenuItem3 = new JMenuItem();

JMenuItem jMenuItem4 = new JMenuItem();

FontChooser fontChooser1 = new FontChooser();//创建字型选择对话框

JMenu jMenu1 = new JMenu();

JMenuItem jMenuItem5 = new JMenuItem();

JMenuItem jMenuItem6 = new JMenuItem();

JMenuItem jMenuItem7 = new JMenuItem();

JFileChooser jFileChooser1 = new JFileChooser();//创建文本选择对话框

String currFileName = null; // Full path with filename. null means new/untitled.

boolean dirty = false;

Document document1; //文本

DBTextDataBinder dBTextDataBinder1 = new DBTextDataBinder();

// True means modified text.

//构造架框

public TextEditFrame() {

enableEvents(AWTEvent.WINDOW_EVENT_MASK);

try {

jbInit();

updateCaption();

}

catch(Exception e) {

e.printStackTrace();

}

}

//组件初始化

private void jbInit() throws Exception {

//三个对象栏按钮图标

image1 = new ImageIcon(TextEditFrame.class.getResource("openFile.gif"));

image2 = new ImageIcon(TextEditFrame.class.getResource("closeFile.gif"));

image3 = new ImageIcon(TextEditFrame.class.getResource("help.gif"));

contentPane = (JPanel) this.getContentPane();//内容创格

document1 = jTextArea1.getDocument();//多行文本域文档

contentPane.setLayout(borderLayout1);//borderLayout结构器

this.setSize(new Dimension(400, 300));//窗口大年夜小

this.setTitle("Text Editor");//窗口标题

statusBar.setText(" ");

menuFile.setText("File");

menuFileExit.setText("Exit");

menuFileExit.addActionListener(new TextEditFrame_menuFileExit_ActionAdapter (this));

//添加事故 监听 器

menuHelp.setText("Help");

menuHelpAbout.setText("About");

menuHelpAbout.addActionListener(new TextEditFrame_menuHelpAbout_ActionAdapter (this));

jButton1.setIcon(image1);//设置三个对象栏按钮图标,添加事故 监听 器

jButton1.addActionListener(new TextEditFrame_jButton1_actionAdapter(this));

jButton1.setToolTipText("Open File");

jButton2.setIcon(image2);

jButton2.addActionListener(new TextEditFrame_jButton2_actionAdapter(this));

jButton2.setToolTipText("Close File");

jButton3.setIcon(image3);

jButton3.addActionListener(new TextEditFrame_jButton3_actionAdapter(this));

jButton3.setToolTipText("About");

jTextArea1.setLineWrap(true);

jTextArea1.setWrapStyleWord(true);

jTextArea1.setBackground(Color.white);

jMenuItem1.setText("New");//设置菜单,添加事故 监听 器

jMenuItem1.addActionListener(new TextEditFrame_jMenuItem1_actionAdapter(this));

jMenuItem2.setText("Open");

jMenuItem2.addActionListener(new TextEditFrame_jMenuItem2_actionAdapter(this));

jMenuItem3.setText("Save");

jMenuItem3.addActionListener(new TextEditFrame_jMenuItem3_actionAdapter(this));

jMenuItem4.setText("Save As");

jMenuItem4.addActionListener(new TextEditFrame_jMenuItem4_actionAdapter(this));

fontChooser1.setFrame(this);

fontChooser1.setTitle("Font");

jMenu1.setText("Edit");

jMenuItem5.setText("Font");

jMenuItem5.addActionListener(new TextEditFrame_jMenuItem5_actionAdapter(this));

jMenuItem6.setText("Foreground Color");

jMenuItem6.addActionListener(new TextEditFrame_jMenuItem6_actionAdapter(this));

jMenuItem7.setT下载和记娱乐appext("Background Color");

jMenuItem7.addActionListener(new TextEditFrame_jMenuItem7_actionAdapter(this));

document1.addDocumentListener(new TextEditFrame_document1_documentAdapter(this));

dBTextDataBinder1.setJTextComponent(jTextArea1);

//Turn off right-click file Open... menu item.

dBTextDataBinder1.setEnableFileLoading(false);

//Turn off right-click file Save... menu item.

dBTextDataBinder1.setEnableFileSaving(false);

toolBar.add(jButton1);//对象组件添加按钮

toolBar.add(jButton2);

toolBar.add(jButton3);

menuFile.add(jMenuItem1);//菜单组件添加菜单项

menuFile.add(jMenuItem2);

menuFile.add(jMenuItem3);

menuFile.add(jMenuItem4);

menuFile.addSeparator();//采单组件添加分隔线

menuFile.add(menuFileExit);

menuHelp.add(menuHelpAbout);

menuBar1.add(menuFile);

menuBar1.add(jMenu1);

menuBar1.add(menuHelp);

this.setJMenuBar(menuBar1);

contentPane.add(toolBar, BorderLayout.NORTH);

//内容窗设置borderLayout结构器

contentPane.add(statusBar, BorderLayout.SOUTH);

contentPane.add(jScrollPane1, BorderLayout.CENTER);

jScrollPane1.getViewport().add(jTextArea1, null);

jMenu1.add(jMenuItem5);

jMenu1.add(jMenuItem6);

jMenu1.add(jMenuItem7);

}

// Display the About box.

void helpAbout() {

TextEditFrame_AboutBox dlg = new TextEditFrame_AboutBox(this);

Dimension dlgSize = dlg.getPreferredSize();

Dimension frmSize = getSize();

Point loc = getLocation();

dlg.setLocation((frmSize.width - dlgSize.width) / 2 + loc.x, (frmSize.height - dlgSize.height) / 2 + loc.y);

dlg.setModal(true);

dlg.show();

}

.........

.........

TextEditFrame.java 是实现文本编辑器的主要法度榜样,它有下面6点编程技术阐明:

1) 制作一个完全充溢用户界面顶部菜单栏和底部状态栏之间区域的文本区

主用户界面目面貌器的结构治理器必要采纳界限结构(Borderlayout)。在主容器中,含有一个叫做内容窗(contentPane)的JPanel 控件,被转变成界限结构,必要做的只是在内容窗添加一个文本区控件。为此,先在内容窗添加一个滚动窗,再在滚动窗内放上文本区控件(jTextArea)。滚动窗供给一个带滚动棒(JScollPane)的文本区。

一个界限结构的容器被分成五个区域:北、南、东、西、中。每个区域只能有一个控件,以是最多可有五个控件(注:含有多个控件的面板被觉得是一个控件)。放进中间区域的控件完全占满该容器控件,不被含有控件的任何其他区域所盘踞。例如,在本例中,对象栏盘踞北区(顶),状态栏盘踞南区(低步),因为器械两个区域没有安排控件,这样滚动窗控件盘踞中间区域并扩展到容器的左(西)右(东)的边缘。

2) 创建菜单File (包孕New、Open、Save、Save as 和Exit菜单项),菜单Edit{包孕Font(字体)、Foreground(前景致)和Background(背景致)菜单项} 和菜单Help (包孕About赞助阐明)

①菜单Edit的Font(字体)、Foreground(前景致)和Background(背景致)菜单项:

添加字型选择对话框

给菜单挂上事故,从 Edit|Font 菜单项开始,该菜单将引出一个FontChooser (字型选择)对话框。

给FontChooser附加一个菜单项事故(源法度榜样)如下:

void jMenuItem5_action下载和记娱乐appPerformed(ActionEvent e) {

// Handle the "Edit Font" menu item

// Pick up the existing font from the text area

// and put it into the FontChooser before showing

// the FontChooser, so that we are editing the

// existing / previous font.

fontChooser1.setSelectedFont(jTextArea1.getFont());

// Obtain the new Font from the FontChooser.

// First test the return value of showDialog() to

// see if the user pressed OK.

if (fontChooser1.showDialog()) {

// Set the font of jTextArea1 to the font

// the user selected before pressing the OK button

jTextArea1.setFont(fontChooser1.getSelectedFont());

}

//repaints menu after item is selected

this.repaint();

//Repaints text properly if some text is highlighted when font is changed.

jTextArea1.repaint();

}

给JcolorChooser(颜色选择)附加一个菜单项事故

添加一个清除文本区的菜单事故处置惩罚器

将File|New菜单项与清除文本区的事故处置惩罚器挂起钩来。

void jMenuItem1_actionPerformed(ActionEvent e) {

// Handle the File|New menu item.

if (okToAbandon()) {

// clears the text of the TextArea

jTextArea1.setText("");

// clear the current filename and set the file as clean:

currFileName = null;

dirty = false;

updateCaption();

}

}

添加一个文件选择对话框

将File|Open菜单项与供给给用户一个文件选择对话框的JfileChooser控件的事故处置下载和记娱乐app惩罚器挂起钩来。假如用户选择了一个文件,按下了OK按钮,这个事故处置惩罚器打开那个文本文件并把翰墨放入JTextArea(即文本区)。

void jMenuItem2_actionPerformed(ActionEvent e) {

//Handle the File|Open menu item.

if (!okToAbandon()) {

return;

}

// Use the OPEN version of the dialog, test return for Approve/Cancel

if (JFileChooser.APPROVE_OPTION == jFileChooser1.showOpenDialog(this)) {

// Call openFile to attempt to load the text from file into

TextArea

openFile(jFileChooser1.getSelectedFile().getPath());

}

this.repaint();

}

添加从文件中读出翰墨的代码

添加从选定的文件中将翰墨实际读到文本区JTextArea的代码。

首先必要在用户类中增添一个新的措施履行实际打开文件的操作,这个措施叫作openFile()。

// Open named file; read text from file into jTextArea1; report to statusBar.

void openFile(String fileName)

{

try

{

// Open a file of the given name.

File file = new File(fileName);

// Get the size of the opened file.

int size = (int)file.length();

// Set to zero a counter for counting the number of

// characters that have been read from the file.

int chars_read = 0;

// Create an input reader based on the file, so we can read its data.

// FileReader handles international character encoding conversions.

FileReader in = new FileReader(file);

// Create a character array of the size of the file,

// to use as a data buffer, into which we will read

// the text data.

char[] data = new char[size];

// Read all available characters into the buffer.

while(in.ready()) {

// Increment the count for each character read,

// and accumulate them in the data buffer.

chars_read += in.read(data, chars_read, size - chars_read);

}

in.close();

// Create a temporary string containing the data,

// and set the string into the JTextArea.

jTextArea1.setText(new String(data, 0, chars_read));

// Display the name of the opened directory+file in the statusBar.

statusBar.setText("Opened "+fileName);

}

catch (IOException e)

{

statusBar.setText("Error opening "+fileName);

}

}

调换先前所说的File|Open 事故处置惩罚器中的 if() 语句:

// Save current file, asking user for new destination name.

// Report to statuBar.

boolean saveAsFile() {

// Use the SAVE version of the dialog, test return for Approve/Cancel

if (JFileChooser.APPROVE_OPTION == jFileChooser1.showSaveDialog(this)) {

// Set the current file name to the user's selection,

// then do a regular saveFile

currFileName = jFileChooser1.getSelectedFile().getPath();

//repaints menu after item is selected

this.repaint();

return saveFile();

}

else {

this.repaint();

return false;

}

}

菜单File|Exit, 在退出利用法度榜样的代码如下:

//File | Exit action performed

public void jMenuFileExit_actionPerformed(ActionEvent e) {

if (okToAbandon()) {

System.exit(0);

}

}

3) 激活对象栏按钮

假如在利用领导中选择了Generate Toolbar(天生对象栏)选项,则Jbuilder就天生平日带有三个JButton 按钮(OPen File、Save File 和About) 控件且有图标显示的JtoolBar(对象栏)代码。要做的便是给每个按钮的标称指定翰墨和指定对象提示翰墨,并为每个按钮创建一个actionPerformed()事故,用户从每个按钮actionPerformed()事故中调用响应的事故处置惩罚措施。

指定按钮对象的提示翰墨

对应jButton1输入Open File

对应jButton2输入Save File

对应jButton3输入About

创建按钮事故

创建对应jButton1的jButton1_actionPerformed(ActionEvent e)事故并从中调用openFile()措施:

对Help|About菜单和About按钮再做一次同样的工作。将当前Help|About事故处置惩罚器中的代码网络到新的 helpAbout()措施中,即可从菜单处置惩罚器也可从按钮处置惩下载和记娱乐app罚器对其调用。

// Display the About box.

void helpAbout() {

TextEditFrame_AboutBox dlg = new TextEditFrame_AboutBox(this);

Dimension dlgSize = dlg.getPreferredSize();

Dimension frmSize = getSize();

Point loc = getLocation();

dlg.setLocation((frmSize.width - dlgSize.width) / 2 + loc.x,(frmSize.height - dlgSize.height) / 2 + loc.y);

dlg.setModal(true);

dlg.show();

}

4) 将事故处置惩罚与文本区联系起来

将事故处置惩罚与文本区JtextArea联系起来,这样只要有输入操感化户法度榜样就设置dirty标志为真。为此必要在JtextArea的文本模板中添加一个Swing控件DocumentListener(文本 监听 器)且反省插入、删除和改变等事故。

DocumentListener被添加到 jbInit():

document1.addDocumentListener(new TextEditFrame_document1_documentAdapter(this));

在void document1_changedUpdate(DocumentEvent e)事故中插入下面代码:

dirty = true;

为document1 再创建两个事故:insertUpdate()和removeUpdate()。 在这些事故中插入在changedUpdate()事故中应用的同样的代码。

这样只要在文本区输入任何字符都将逼迫dirty标志为真。

5) 在文本区添加一个右击弹出菜单

控件DBTextDataBinder用来在Swing文本控件中添加一个履行诸如剪切、复制、粘贴等简单编辑义务的右击菜单。DBTextDataBinder还有一个将文件装入JtextArea和保存文件的内部动作,但不容许用户规复显示在状态栏的装入或保存的文件名。本例中,只是添加一个DBTextDataBinder控件给jTextArea1,不应用此中的文件打开和保存操作。

package texteditor;

import javax.swing.UIManager;

import java.awt.*;

/**

* <p>Title: TextEditor</p>

* <p>Description: This is a s下载和记娱乐apptudy programme</p>

* <p>Copyright: Copyright (c) 2004</p>

* <p>Company: ghq</p>

* @author ghq

* @version 1.0

*/

public class TextEditClass {

boolean packFrame = false;

//Construct the application

public TextEditClass() {

TextEditFrame frame = new TextEditFrame();

//Validate frames that have preset sizes

//Pack frames that have useful preferred size info, e.g. from their layout

if (packFrame) {

frame.pack();

}

else {

frame.validate();

}

//Center the window

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

Dimension frameSize = frame.getSize();

if (frameSize.height > screenSize.height) {

frameSize.height = screenSize.height;

}

if (frameSize.width > screenSize.width) {

frameSize.width = screenSize.width;

}

frame.setLocation((screenSize.width - frameSize.width) / 2,

(screenSize.height - frameSize.height) / 2);

frame.setVisible(true);

}

//Main method

public static void main(String[] args) {

try {

UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

}

catch(Exception e) {

e.printStackTrace();

}

new TextEditClass();

}

}

上面的这段法度榜样主如果构建 TextEditorFrame 的主窗口和主措施进口(main ()),它有下面2点编程技术阐明:

您可能还会对下面的文章感兴趣: