您的位置:首页 > 产品设计 > UI/UE

基于java swing GUI界面,编辑框的复制算法

2013-11-18 14:59 363 查看
这个算法是在网上找到的一个比较有用的算法,能够容易的通过菜单对编辑区的内容进行复制,粘贴,剪切操作。
倘若你所制作的是一个需要进行这些操作的程序,那么可以直接用内部类的形式实现。一下代码为一组通用代码。
class TextAreaMenu extends JTextArea implements MouseListener {
  private JPopupMenu pop = null; // 弹出菜单
  private JMenuItem copy = null, paste = null, cut = null; //声明菜单选项的功能
  public TextAreaMenu() {
   super();
   init();//调用菜单初始化方法
  }
  private void init() {//对菜单进行初始化
   this.addMouseListener(this);
   pop = new JPopupMenu();
   pop.add(copy = new JMenuItem("复制"));
   pop.add(paste = new JMenuItem("粘贴"));
   pop.add(cut = new JMenuItem("剪切"));
   copy.setAccelerator(KeyStroke.getKeyStroke('C',
     InputEvent.CTRL_MASK));/设置复制快捷键/
   paste.setAccelerator(KeyStroke.getKeyStroke('V',
     InputEvent.CTRL_MASK));//设置粘贴快捷键
   cut.setAccelerator(KeyStroke
     .getKeyStroke('X', InputEvent.CTRL_MASK));//设置剪切快捷键
   copy.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
     action(e);
    }
   });
   paste.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
     action(e);
    }
   });
   cut.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
     action(e);
    }
   });
   this.add(pop);
  }
  /**
   * 菜单动作
   * @param e
   */
  public void action(ActionEvent e) {
   String str = e.getActionCommand();
   if (str.equals(copy.getText())) { // 复制
    this.copy();
   } else if (str.equals(paste.getText())) { // 粘贴
    this.paste();
   } else if (str.equals(cut.getText())) { // 剪切
    this.cut();
   }
  }
  public JPopupMenu getPop() {
   return pop;
  }
  public void setPop(JPopupMenu pop) {
   this.pop = pop;
  }
  /**
   * 剪切板中是否有文本数据可供粘贴
   * @return true为有文本数据
   */
  public boolean isClipboardString() {
   boolean b = false;
   Clipboard clipboard = this.getToolkit().getSystemClipboard();
   Transferable content = clipboard.getContents(this);
   try {
    if (content.getTransferData(DataFlavor.stringFlavor) instanceof String) {
     b = true;
    }
   } catch (Exception e) {
   }
   return b;
  }
  /**
   * 文本组件中是否具备复制的条件
   * @return true为具备
   */
  public boolean isCanCopy() {
   boolean b = false;
   int start = this.getSelectionStart();
   int end = this.getSelectionEnd();
   if (start != end)
    b = true;
   return b;
  }
  public void mouseClicked(MouseEvent e) {
  }
  public void mouseEntered(MouseEvent e) {
  }
  public void mouseExited(MouseEvent e) {
  }
  public void mousePressed(MouseEvent e) {
   if (e.getButton() == MouseEvent.BUTTON3) {
    copy.setEnabled(isCanCopy());
    paste.setEnabled(isClipboardString());
    cut.setEnabled(isCanCopy());
    pop.show(this, e.getX(), e.getY());
   }
  }
  public void mouseReleased(MouseEvent e) {
  }
 }
此段代码是一段功能性代码,要完成需要添加到其他应用中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: