package org.arong.egdownloader.ui.swing; import java.awt.Color; import java.awt.Toolkit; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JPopupMenu; import javax.swing.JTextField; import org.arong.egdownloader.ui.IconManager; /** * 封装JTextField,使构造函数可以设置name值,大小及坐标(含右键菜单) * @author 阿荣 * @since 2013-8-25 * */ public class AJTextField extends JTextField { private static final long serialVersionUID = -1763143133193131228L; private JPopupMenu popupMenu; private Color color = new Color(0,0,85); //右键菜单:复制 private AJMenuItem copyMenuItem = new AJMenuItem("复制", color, IconManager.getIcon("copy"), null); //右键菜单:剪切 private AJMenuItem cutMenuItem = new AJMenuItem("剪切", color, IconManager.getIcon("cut"), null); //右键菜单:粘贴 private AJMenuItem pasteMenuItem = new AJMenuItem("粘贴", color, IconManager.getIcon("paste"), null); //右键菜单:清空 private AJMenuItem clearMenuItem = new AJMenuItem("清空", color, IconManager.getIcon("clear"), null); //右键菜单:全选 private AJMenuItem selectAllMenuItem = new AJMenuItem("全选", color, null); public AJTextField(String name, int x, int y, int width, int height){ this.setName(name); this.setBounds(x, y, width, height); final AJTextField this_ = this; copyMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String selectText = this_.getSelectedText(); if(selectText != null && !"".equals(selectText)){ StringSelection ss = new StringSelection(selectText); Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, ss); } } }); cutMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(!this_.isEditable()){ return; } String selectText = this_.getSelectedText(); if(selectText != null && !"".equals(selectText)){ StringSelection ss = new StringSelection(selectText); Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, ss); this_.setText(this_.getText().replaceAll(selectText, "")); } } }); pasteMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(!this_.isEditable()){ return; } Transferable t = this_.getToolkit().getSystemClipboard().getContents(this); //判断内容是否为空,是否为字符串 if(t != null && t.isDataFlavorSupported(DataFlavor.stringFlavor)){ try { this_.setText(this_.getText() + t.getTransferData(DataFlavor.stringFlavor) + ""); } catch (Exception e1) { System.out.println("粘贴出错"); } } } }); clearMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(!this_.isEditable()){ return; } this_.setText(""); } }); selectAllMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { this_.requestFocus(); this_.selectAll(); } }); popupMenu = new AJPopupMenu(copyMenuItem, cutMenuItem, pasteMenuItem, clearMenuItem, selectAllMenuItem); this.addMouseListener(new MouseListener() { public void mouseReleased(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseClicked(MouseEvent e) { AJTextField field = (AJTextField)e.getSource(); //获取点击的行数 if(e.getButton() == MouseEvent.BUTTON3){ String text = this_.getText(); String selectText = this_.getSelectedText(); //是否复制 if(selectText == null || "".equals(selectText)){ copyMenuItem.setEnabled(false); copyMenuItem.setForeground(Color.GRAY); cutMenuItem.setEnabled(false); cutMenuItem.setForeground(Color.GRAY); }else{ copyMenuItem.setEnabled(true); copyMenuItem.setForeground(color); cutMenuItem.setEnabled(true); cutMenuItem.setForeground(color); } //是否粘贴 Transferable t = this_.getToolkit().getSystemClipboard().getContents(this); //判断内容是否为空,是否为字符串 if(t == null || !t.isDataFlavorSupported(DataFlavor.stringFlavor) || !this_.isEditable()){ pasteMenuItem.setEnabled(false); pasteMenuItem.setForeground(Color.GRAY); }else{ pasteMenuItem.setEnabled(true); pasteMenuItem.setForeground(color); } //是否清空/全选 if("".equals(text) || !this_.isEditable()){ clearMenuItem.setEnabled(false); clearMenuItem.setForeground(Color.GRAY); selectAllMenuItem.setEnabled(false); selectAllMenuItem.setForeground(Color.GRAY); }else{ clearMenuItem.setEnabled(true); clearMenuItem.setForeground(color); selectAllMenuItem.setEnabled(true); selectAllMenuItem.setForeground(color); } popupMenu.show(field, e.getPoint().x, e.getPoint().y); } } }); } public AJTextField(String text,String name, int x, int y, int width, int height){ this(name, x, y, width, height); this.setText(text); } }