C語言中文網 目錄
首頁 > Java Swing 閱讀:1,842

Java Swing文本編輯器的實現

最簡單的文本編輯器要數 Windows 的記事本了。在學習了本章知識之后,本次案例將完成一個簡單的文本編輯器程序。它可以打開文本文件,并輸出文本文件的位置和內容。其中用到了菜單工具欄以及選項卡等組件,是一個綜合類的應用,主要實現步驟如下。

(1) 創建一個 TextFileOpener 類并繼承 JFrame 父類。
package ch18;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.filechooser.FileNameExtensionFilter;
public class TextFileOpener extends JFrame
{
    private static final long serialVersionUID=-9077023825514749548L;
    private JTextArea ta_showText;    //定義顯示文件屬性的文本域
    private JTextArea ta_showProperty;    //定義顯示文件內容的文本域
    //Launch the application.
    public static void main(String[] args)
    {
        TextFileOpener frame=new TextFileOpener();
        frame.setVisible(true);
    }   
}

(2) 在構造方法中布局的設置,包括窗口大小、菜單欄和菜單項、工具欄,以及對各個組件的事件監聽,主要實現代碼如下所示。
public TextFileOpener()
{
    setTitle("文本編輯器");    //設置窗體標題
    setBounds(100,100,400,250);    //設置窗體位置和大小
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);    //設置窗體默認關閉方式
    final JMenuBar menuBar=new JMenuBar();    //創建菜單欄
    setJMenuBar(menuBar);    //把菜單欄放到窗體上
    final JMenu mn_file=new JMenu();    //創建文件菜單
    mn_file.setText("文件");    //為文件菜單設置標題
    menuBar.add(mn_file);    //把文件菜單添加到菜單欄上
    final JMenuItem mi_open=new JMenuItem();    //創建打開菜單項
    mi_open.addActionListener(new ActionListener()
    {
        //為打開菜單項添加監聽器
        public void actionPerformed(final ActionEvent arg0)
        {
            openTextFile();    //調用方法,操作文件
        }
    });
    mi_open.setText("打開");    //設置打開菜單項的標題
    mn_file.add(mi_open);    //把打開菜單項添加到文件菜單
    mn_file.addSeparator();    //添加菜單分隔符
    final JMenuItem mi_exit=new JMenuItem();    //創建退出菜單項
    mi_exit.addActionListener(new ActionListener()
    {
        //為退出菜單項添加監聽器
        public void actionPerformed(final ActionEvent arg0)
        {
            System.exit(0);    //退出系統
        }
    });
    mi_exit.setText("退出");    //設置退出菜單項的標題
    mn_file.add(mi_exit);    //把退出菜單項添加到文件菜單
    final JMenu mn_edit=new JMenu();    //創建編輯菜單
    mn_edit.setText("編輯");    //為編輯菜單設置標題
    menuBar.add(mn_edit);    //把編輯菜單添加到菜單欄上
    final JMenuItem mi_copy=new JMenuItem();    //創建復制菜單項
    mi_copy.setText("復制");    //設置復制菜單項的標題
    mn_edit.add(mi_copy);    //把復制菜單項添加到編輯菜單
    final JMenuItem mi_cut=new JMenuItem();    //創建剪切菜單項
    mi_cut.setText("剪切");    //設置剪切菜單項的標題
    mn_edit.add(mi_cut);    //把剪切菜單項添加到編輯菜單
    final JMenuItem mi_paste=new JMenuItem();    //創建粘貼菜單項
    mi_paste.setText("粘貼");    //設置粘貼菜單項的標題
    mn_edit.add(mi_paste);    //把粘貼菜單項添加到編輯菜單
    final JToolBar toolBar=new JToolBar();    //創建工具欄
    getContentPane().add(toolBar,BorderLayout.NORTH);    //把工具欄放到窗體上方
    final JButton btn_open=new JButton();    //創建工具按鈕
    btn_open.addActionListener(new ActionListener()
    {
        //添加動作監聽器
        public void actionPerformed(final ActionEvent arg0)
        {
            openTextFile();    //調用方法,操作文件
        }
    });
    btn_open.setText("  打  開  ");    //設置工具按鈕的標題
    toolBar.add(btn_open);    //把工具按鈕添加到工具欄上
    final JButton btn_exit=new JButton();    //創建工具按鈕
    btn_exit.addActionListener(new ActionListener()
    {
        //添加動作監聽器
        public void actionPerformed(final ActionEvent arg0)
        {
            System.exit(0);    //退出系統
        }
    });
    btn_exit.setText("  退  出  ");    //設置工具按鈕的標題
    toolBar.add(btn_exit);    //把工具按鈕添加到工具欄上
    final JTabbedPane tabbedPane=new JTabbedPane();    //創建選項卡面板
    getContentPane().add(tabbedPane,BorderLayout.CENTER);    //把選項卡面板放到窗體中央
    final JScrollPane scrollPane1=new JScrollPane();    //創建滾動面板
    //把滾動面板放到選項卡的第一個選項頁
    tabbedPane.addTab("文件的屬性",null,scrollPane1,null);
    ta_showProperty=new JTextArea();    //創建文本域
    //把文本域添加到滾動面板的視圖中
    scrollPane1.setViewportView(ta_showProperty);
    final JScrollPane scrollPane2=new JScrollPane();    //創建滾動面板
    //把滾動面板放到選項卡的第二個選項頁
    tabbedPane.addTab("文件的內容",null,scrollPane2,null);
    ta_showText=new JTextArea();    //創建文本域
    //把文本域添加到滾動面板的視圖中
    scrollPane2.setViewportView(ta_showText);
}

(3) 無論是從菜單欄還是工具欄選擇“打開”文件操作時都是調用 openTextFile() 方法。該方法會彈出文件選擇器讓用戶選擇一個文件,然后使用文件流獲取文件屬性和讀取文件的內容,再把信息呈現到界面上。openTextFile() 方法的實現代碼如下:
//用于打開文件并獲得文件信息的方法
public void openTextFile()
{
    JFileChooser fileChooser=new JFileChooser();    //創建文件選擇對話框
    fileChooser.setFileFilter(new FileNameExtensionFilter("文本文件","txt"));
    int returnValue=fileChooser.showOpenDialog(getContentPane());    //打開文件選擇對話框
    if(returnValue==JFileChooser.APPROVE_OPTION)
    {
        //判斷用戶是否選擇了文件
        File file=fileChooser.getSelectedFile();    //獲得文件對象
        //獲得文件的絕對路徑
        ta_showProperty.append("文件的絕對路徑是:"+file.getAbsolutePath()+"\n");
        //是否為隱藏文件
        ta_showProperty.append("該文件是隱藏文件嗎?"+file.isHidden()+"\n");
        FileReader reader;    //聲明字符流
        BufferedReader in;    //聲明字符緩沖流
        try
        {
            reader=new FileReader(file);    //創建字符流
            in=new BufferedReader(reader);    //創建字符緩沖流
            String info=in.readLine();    //從文件中讀取一行信息
            while(info!=null)
            {
                //判斷是否讀到內容
                ta_showText.append(info+"\n");    //把讀到的信息追加到文本域中
                info=in.readLine();    //繼續讀下一行信息
            }
            in.close();    //關閉字符緩沖流
            reader.close();    //關閉字符流
        }
        catch(Exception ex)
        {
            ex.printStackTrace();    //輸出棧蹤跡
        }
    }
}

(4) 運行程序,單擊“打開”按鈕,選擇一個 TXT 文件。圖 1 所示為查看文件屬性效果,圖 2 所示為查看文件內容效果。單擊“退出”按鈕,可以關閉程序。

查看文件屬性
圖1 查看文件屬性

查看文件內容
圖2 查看文件內容

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo