top
Loading...
用JBuilder9開發一個文本編輯器
天極IT資訊短信服務 電腦小技巧
資費:包月5元
手機:
介紹:細處著手,巧處用功。高手和菜鳥之間的差別就是:高手什么都知道,菜鳥知道一些。電腦小技巧收集最新奇招高招,讓你輕松踏上高手之路。

一、概述

文本編輯器是一種最常用的應用程序,下面我們利用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.setText("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();
}
.........
.........

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗