實現文本剪切的兩種方式:自定義Action和使用DefaultEditorKit

package javaapp;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.util.Hashtable;
import javax.swing.Action;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JTextArea;
import javax.swing.text.DefaultEditorKit;
import static javax.swing.text.DefaultEditorKit.cutAction;
import javax.swing.text.JTextComponent;
import javax.swing.text.TextAction;

/**
 *
 * @author wind
 */
public class JavaApp extends JFrame {

    private JMenuBar menuBar = new JMenuBar();
    private JTextArea textArea = new JTextArea("some content");

    public JavaApp() {
        textArea.setFont(new Font("Dialog", Font.PLAIN, 24));
        this.setJMenuBar(createMenu());
        this.add(textArea, BorderLayout.CENTER);
        setTitle("Test");
        setSize(800, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }

    public static void main(String[] args) {
        JavaApp j = new JavaApp();

    }

    private JMenuBar createMenu() {
        JMenuBar menuBar = new JMenuBar();
        JMenu editMenu = new JMenu("Edit");
        menuBar.add(editMenu);
        //editMenu.add(new CutAction("剪切"));//方案一:自定義實現剪切操作
        editMenu.add(getAction(DefaultEditorKit.cutAction));//方案二:DefaultEditorKit實現剪切操作。
        return menuBar;
    }

    //方案2輔助函數
    private Action getAction(String name) {
        Hashtable actionTable = new Hashtable();
        Action[] actions = textArea.getActions();
        for (int i = 0; i < actions.length; ++i) {
            actionTable.put(actions[i].getValue(Action.NAME), actions[i]);
        }
        return (Action) actionTable.get(name);
    }

    //方案1輔助類
    private class CutAction extends TextAction {

        public CutAction(String name) {
            super(name);
        }

        @Override
        public void actionPerformed(ActionEvent e) {//當菜單被點擊是,調用一下程序執行剪切
            JTextComponent target = this.getTextComponent(e);
            if (target != null) {
                target.cut();
            }
        }

    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章