Text component supports both cut, copy and paste (using the DefaultEditorKit's built-in actions) and drag and drop : 文本控件 « Swing « Java 教程

En
Java 教程
1. 语言基础
2. 数据类型
3. 操作符
4. 流程控制
5. 类定义
6. 开发相关
7. 反射
8. 正则表达式
9. 集合
10. 线
11. 文件
12. 泛型
13. 本土化
14. Swing
15. Swing事件
16. 二维图形
17. SWT
18. SWT 二维图形
19. 网络
20. 数据库
21. Hibernate
22. JPA
23. JSP
24. JSTL
25. Servlet
26. Web服务SOA
27. EJB3
28. Spring
29. PDF
30. 电子邮件
31. 基于J2ME
32. J2EE应用
33. XML
34. 设计模式
35. 日志
36. 安全
37. Apache工具
38. 蚂蚁编译
39. JUnit单元测试
Java
Java 教程 » Swing » 文本控件 
14. 14. 19. Text component supports both cut, copy and paste (using the DefaultEditorKit's built-in actions) and drag and drop
/*
 * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Sun Microsystems nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

/**
 * TextCutPaste.java requires the following file:
 *     TextTransferHandler.java
 */

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.awt.event.KeyEvent;

import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.TransferHandler;
import javax.swing.UIManager;
import javax.swing.text.BadLocationException;
import javax.swing.text.DefaultEditorKit;
import javax.swing.text.Document;
import javax.swing.text.JTextComponent;
import javax.swing.text.Position;

/**
 * Example code that shows a text component that supports both cut, copy and
 * paste (using the DefaultEditorKit's built-in actions) and drag and drop.
 */
public class TextCutPaste extends JPanel {
  TextTransferHandler th;

  public TextCutPaste() {
    super(new BorderLayout());

    setBorder(BorderFactory.createEmptyBorder(20202020));

    // Create the transfer handler.
    TextTransferHandler th = new TextTransferHandler();

    // Create some text fields.
    JPanel buttonPanel = new JPanel(new GridLayout(31));
    JTextField textField = new JTextField("Cut, copy and paste..."30);
    textField.setTransferHandler(th);
    textField.setDragEnabled(true);
    buttonPanel.add(textField);
    textField = new JTextField("or drag and drop..."30);
    textField.setTransferHandler(th);
    textField.setDragEnabled(true);
    buttonPanel.add(textField);
    textField = new JTextField("from any of these text fields."30);
    textField.setTransferHandler(th);
    textField.setDragEnabled(true);
    buttonPanel.add(textField);
    add(buttonPanel, BorderLayout.CENTER);
  }

  /**
   * Create an Edit menu to support cut/copy/paste.
   */
  public JMenuBar createMenuBar() {
    JMenuItem menuItem = null;
    JMenuBar menuBar = new JMenuBar();
    JMenu mainMenu = new JMenu("Edit");
    mainMenu.setMnemonic(KeyEvent.VK_E);

    menuItem = new JMenuItem(new DefaultEditorKit.CutAction());
    menuItem.setText("Cut");
    menuItem.setMnemonic(KeyEvent.VK_T);
    mainMenu.add(menuItem);

    menuItem = new JMenuItem(new DefaultEditorKit.CopyAction());
    menuItem.setText("Copy");
    menuItem.setMnemonic(KeyEvent.VK_C);
    mainMenu.add(menuItem);

    menuItem = new JMenuItem(new DefaultEditorKit.PasteAction());
    menuItem.setText("Paste");
    menuItem.setMnemonic(KeyEvent.VK_P);
    mainMenu.add(menuItem);

    menuBar.add(mainMenu);
    return menuBar;
  }

  /**
   * Create the GUI and show it. For thread safety, this method should be
   * invoked from the event-dispatching thread.
   */
  private static void createAndShowGUI() {
    // Create and set up the window.
    JFrame frame = new JFrame("TextCutPaste");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    // Create and set up the menu bar and content pane.
    TextCutPaste demo = new TextCutPaste();
    frame.setJMenuBar(demo.createMenuBar());
    demo.setOpaque(true)// content panes must be opaque
    frame.setContentPane(demo);

    // Display the window.
    frame.pack();
    frame.setVisible(true);
  }

  public static void main(String[] args) {
    // Schedule a job for the event-dispatching thread:
    // creating and showing this application's GUI.
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        // Turn off metal's use of bold fonts
        UIManager.put("swing.boldMetal", Boolean.FALSE);
        createAndShowGUI();
      }
    });
  }
}

/*
 * Copyright (c) 1995 - 2008 Sun Microsystems, Inc. All rights reserved.
 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *  - Redistributions of source code must retain the above copyright notice,
 * this list of conditions and the following disclaimer.
 *  - Redistributions in binary form must reproduce the above copyright notice,
 * this list of conditions and the following disclaimer in the documentation
 * and/or other materials provided with the distribution.
 *  - Neither the name of Sun Microsystems nor the names of its contributors may
 * be used to endorse or promote products derived from this software without
 * specific prior written permission.
 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

/**
 * TextTransferHandler.java is used by the TextCutPaste.java example.
 */

/**
 * An implementation of TransferHandler that adds support for the import and
 * export of text using drag and drop and cut/copy/paste.
 */
class TextTransferHandler extends TransferHandler {
  // Start and end position in the source text.
  // We need this information when performing a MOVE
  // in order to remove the dragged text from the source.
  Position p0 = null, p1 = null;

  /**
   * Perform the actual import. This method supports both drag and drop and
   * cut/copy/paste.
   */
  public boolean importData(TransferHandler.TransferSupport support) {
    // If we can't handle the import, bail now.
    if (!canImport(support)) {
      return false;
    }

    // Fetch the data -- bail if this fails
    String data;
    try {
      data = (Stringsupport.getTransferable().getTransferData(
          DataFlavor.stringFlavor);
    catch (UnsupportedFlavorException e) {
      return false;
    catch (java.io.IOException e) {
      return false;
    }

    JTextField tc = (JTextFieldsupport.getComponent();
    tc.replaceSelection(data);
    return true;
  }

  /**
   * Bundle up the data for export.
   */
  protected Transferable createTransferable(JComponent c) {
    JTextField source = (JTextFieldc;
    int start = source.getSelectionStart();
    int end = source.getSelectionEnd();
    Document doc = source.getDocument();
    if (start == end) {
      return null;
    }
    try {
      p0 = doc.createPosition(start);
      p1 = doc.createPosition(end);
    catch (BadLocationException e) {
      System.out
          .println("Can't create position - unable to remove text from source.");
    }
    String data = source.getSelectedText();
    return new StringSelection(data);
  }

  /**
   * These text fields handle both copy and move actions.
   */
  public int getSourceActions(JComponent c) {
    return COPY_OR_MOVE;
  }

  /**
   * When the export is complete, remove the old text if the action was a move.
   */
  protected void exportDone(JComponent c, Transferable data, int action) {
    if (action != MOVE) {
      return;
    }

    if ((p0 != null&& (p1 != null&& (p0.getOffset() != p1.getOffset())) {
      try {
        JTextComponent tc = (JTextComponentc;
        tc.getDocument()
            .remove(p0.getOffset(), p1.getOffset() - p0.getOffset());
      catch (BadLocationException e) {
        System.out.println("Can't remove text from source.");
      }
    }
  }

  /**
   * We only support importing strings.
   */
  public boolean canImport(TransferHandler.TransferSupport support) {
    // we only import Strings
    if (!support.isDataFlavorSupported(DataFlavor.stringFlavor)) {
      return false;
    }
    return true;
  }
}
14. 14. 文本控件
14. 14. 1. JTextComponent: the parent class for all the components used as textual views.
14. 14. 2. 绘制背景组件绘制背景组件
14. 14. 3. 加载和保存内容加载和保存内容
14. 14. 4. 使用系统剪贴板使用系统剪贴板
14. 14. 5. 默认编辑器工具包: cutAction默认编辑器工具包: cutAction
14. 14. 6. 注册键盘动作: registerKeyboardAction注册键盘动作: registerKeyboardAction
14. 14. 7. CaretListener接口和CaretEvent类CaretListener接口和CaretEvent类
14. 14. 8. 限制加字符事件: NavigationFilter限制加字符事件: NavigationFilter
14. 14. 9. 从文字部分删除键盘事件从文字部分删除键盘事件
14. 14. 10. 监听文字组件事件ActionListener监听文字组件事件ActionListener
14. 14. 11. 监听JTextField事件KeyListener监听JTextField事件KeyListener
14. 14. 12. 共享文件
14. 14. 13. 监听文字组件事件InputVerifier监听文字组件事件InputVerifier
14. 14. 14. TextAction名常量
14. 14. 15. 使用文字组件事件使用文字组件事件
14. 14. 16. 监听文字活动, DocumentListener监听文字活动, DocumentListener
14. 14. 17. 打印文本组件打印文本组件
14. 14. 18. GIF格式
14. 14. 19. Text component supports both cut, copy and paste (using the DefaultEditorKit's built-in actions) and drag and drop
14. 14. 20. 覆盖默认操作的JTextComponent
14. 14. 21. Modifying Text in a JTextComponent: Insert some text at the beginning
14. 14. 22. Modifying Text in a JTextComponent: Insert some text after the 5th character
14. 14. 23. 修改文字JTextComponent :附加一些文字
14. 14. 24. Modifying Text in a JTextComponent: Delete the first 5 characters
14. 14. 25. Modifying Text in a JTextComponent: Replace the first 3 characters with some text
14. 14. 26. 限制文字长度的JTextComponent
14. 14. 27. 过滤所有编辑操作
14. 14. 28. 文字拖拽JTextComponent
14. 14. 29. 枚举所有视图JTextComponent
14. 14. 30. 从JTextComponents共享文件
14. 14. 31. 突出一个字JTextComponent
14. 14. 32. 删除突出的文字JTextComponent
14. 14. 33. 监听加字符事件JTextComponent
14. 14. 34. 监听编辑事件JTextComponent
14. 14. 35. 移动加字符JTextComponent
14. 14. 36. 设置加字符眨眼率JTextComponent
14. 14. 37. 使用选择JTextComponent
14. 14. 38. 更好的办法来确定选择
14. 14. 39. 设置选定文本颜色的背景
14. 14. 40. 设置加字符颜色
14. 14. 41. 文件和DocumentFilter
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.