WEB开发网
开发学院软件开发Java Swing中为文本组件定制统一的菜单 阅读

Swing中为文本组件定制统一的菜单

 2009-09-22 00:00:00 来源:WEB开发网   
核心提示:在很多软件中每个文本组件都有自定义的菜单,这个blogjava的编辑器就有这样的菜单如:Cut , Copy,Paste,Delete,Select All,在Swing中若也想在JTextField,JTextArea,JEditorPane,JTextPane等等这些组件中都提供如此自定义菜单的功能,Swing中为

在很多软件中每个文本组件都有自定义的菜单,这个blogjava的编辑器就有这样的菜单如:Cut , Copy,Paste,Delete,Select All,在Swing中若也想在JTextField,JTextArea,JEditorPane,JTextPane等等这些组件中都提供如此自定义菜单的功能,每个都写继承类?或者加鼠标监听事件?但不管怎样弄都会实现效果,只不过这样动静很大,不好维护,今天在网上看到一个很是方便的方法。

大家都知道,Swing中所有的事件都是进入java.awt.EventQueue这个队列中等待,然后通过dispatchEvent方法进行派发,那么我们在这里就写个继承EventQueue这个类,拦截所有的事件并对其进行处理,我们的文本组件都是继承与JTextComponent的,那么到这里我们就能为所有的文本组件定制一致的菜单了。效果如:

Swing中为文本组件定制统一的菜单     

Swing中为文本组件定制统一的菜单

见代码:

package org.kissjava.swingx.core;
import java.awt.AWTEvent;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import javax.swing.AbstractAction;
import javax.swing.JPopupMenu;
import javax.swing.MenuSelectionManager;
import javax.swing.SwingUtilities;
import javax.swing.text.JTextComponent;
public class KJEventQueue extends EventQueue {
    @Override
     protected void dispatchEvent(AWTEvent event){ 
            super.dispatchEvent(event); 
     
            // interested only in mouseevents 
            if(!(event instanceof MouseEvent)) 
                return; 
     
            MouseEvent me = (MouseEvent)event; 
     
            // interested only in popuptriggers 
            if(!me.isPopupTrigger()) 
                return; 
     
            // me.getComponent() retunrs the heavy weight component on which event occured 
            Component comp = SwingUtilities.getDeepestComponentAt(me.getComponent(), me.getX(), me.getY()); 
     
            // interested only in textcomponents 
            if(!(comp instanceof JTextComponent)) 
                return; 
     
            // no popup shown by user code 
            if(MenuSelectionManager.defaultManager().getSelectedPath().length>0) 
                return; 
     
            // create popup menu and show 
            JTextComponent tc = (JTextComponent)comp; 
            JPopupMenu menu = new JPopupMenu(); 
            menu.add(new CutAction(tc)); 
            menu.add(new CopyAction(tc)); 
            menu.add(new PasteAction(tc)); 
            menu.add(new DeleteAction(tc)); 
            menu.addSeparator(); 
            menu.add(new SelectAllAction(tc)); 
            
            Point pt = SwingUtilities.convertPoint(me.getComponent(), me.getPoint(), tc);
            menu.show(tc, pt.x, pt.y);
        } 
     class CutAction extends AbstractAction{ 
            JTextComponent comp; 
         
            public CutAction(JTextComponent comp){ 
                super("Cut"); 
                this.comp = comp; 
            } 
         
            public void actionPerformed(ActionEvent e){ 
                comp.cut(); 
            } 
         
            public boolean isEnabled(){ 
                return comp.isEditable() 
                        && comp.isEnabled() 
                        && comp.getSelectedText()!=null; 
            } 
        } 
         
        // @author Santhosh Kumar T - santhosh@in.fiorano.com 
        class PasteAction extends AbstractAction{ 
            JTextComponent comp; 
         
            public PasteAction(JTextComponent comp){ 
                super("Paste"); 
                this.comp = comp; 
            } 
         
            public void actionPerformed(ActionEvent e){ 
                comp.paste(); 
            } 
         
            public boolean isEnabled(){ 
                if (comp.isEditable() && comp.isEnabled()){ 
                    Transferable contents = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(this); 
                    return contents.isDataFlavorSupported(DataFlavor.stringFlavor); 
                }else 
                    return false; 
            } 
        } 
         
        // @author Santhosh Kumar T - santhosh@in.fiorano.com 
        class DeleteAction extends AbstractAction{ 
            JTextComponent comp; 
         
            public DeleteAction(JTextComponent comp){ 
                super("Delete"); 
                this.comp = comp; 
            } 
         
            public void actionPerformed(ActionEvent e){ 
                comp.replaceSelection(null); 
            } 
         
            public boolean isEnabled(){ 
                return comp.isEditable() 
                        && comp.isEnabled() 
                        && comp.getSelectedText()!=null; 
            } 
        } 
         
        // @author Santhosh Kumar T - santhosh@in.fiorano.com 
        class CopyAction extends AbstractAction{ 
            JTextComponent comp; 
         
            public CopyAction(JTextComponent comp){ 
                super("Copy"); 
                this.comp = comp; 
            } 
         
            public void actionPerformed(ActionEvent e){ 
                comp.copy(); 
            } 
         
            public boolean isEnabled(){ 
                return comp.isEnabled() 
                        && comp.getSelectedText()!=null; 
            } 
        } 
         
        // @author Santhosh Kumar T - santhosh@in.fiorano.com 
        class SelectAllAction extends AbstractAction{ 
            JTextComponent comp; 
         
            public SelectAllAction(JTextComponent comp){ 
                super("Select All"); 
                this.comp = comp; 
            } 
         
            public void actionPerformed(ActionEvent e){ 
                comp.selectAll(); 
            } 
         
            public boolean isEnabled(){ 
                return comp.isEnabled() 
                        && comp.getText().length()>0; 
            } 
        } 
}

1 2  下一页

Tags:Swing 文本 组件

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接