各位大虾,我现在在用java做一个记事本,想问下怎么完成复制功能。(不知道怎么获取鼠标选中的文本)。

解决方案 »

  1.   

    楼主应该仔细察看api啊,JTextArea中继承下来的copy方法就是:将关联文本模型中当前选定的范围传输到系统剪贴板,并在文本模型中保留内容。当前选定保持原样。对于 null 选定不执行任何操作。 
    剪切,粘贴同理
      

  2.   

    参考一个简单的例子import java.awt.FileDialog;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea; /** 包括菜单:
     文件:新建/打开/保存/另存/退出
     编辑:撤销/剪切/复制/粘贴/删除/查找/替换/全选
     帮助:关于记事本
     */
    public class Notepad implements ActionListener{
    JFrame jf = new JFrame("记事本");
    JTextArea jta = new JTextArea(10,20);//记事本,显示纯文本的多行区域

    public Notepad(){
    String[] menuLabel ={"文件", "编辑","帮助"};
    String[][] miLabel ={{"新建", "" ,  "打开",  "保存",  "另存","" , "退出"},
    {"撤销",  "剪切",  "复制",  "粘贴", " 删除", "","查找",  "替换", "" ,"全选"},
                    {" 关于记事本"} };
    JMenuBar jmb = new JMenuBar();
    for(int i=0;i<menuLabel.length;i++){
    JMenu jm = new JMenu(menuLabel[i]);
    jmb.add(jm);
      for(int j=0;j<miLabel[i].length;j++){
      if("".equals(miLabel[i][j])){
      jm.addSeparator();
      }else{
      JMenuItem jmi = new JMenuItem(miLabel[i][j]);
      jm.add(jmi);
      jmi.addActionListener(this);
      }
    }
      }
    jf.setJMenuBar(jmb);
    jf.add(new JScrollPane(jta));
    jf.setLocation(300,300);
    jf.setSize(400,400);
    jf.setVisible(true);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    @Override
    public void actionPerformed(ActionEvent e) {
    String comm = e.getActionCommand();
    if("新建".equals(comm)){
    jta.setText("");
    }else if("打开".equals(comm)){
    //FileDialog 类显示一个对话框窗口,用户可以从中选择文件
    //由于它是一个模式对话框,当应用程序调用其 show 方法来显示对话框时,
    //它将阻塞其余应用程序,直到用户选择一个文件
    FileDialog fd = new FileDialog(jf,"请选择要打开的文件",FileDialog.LOAD);
    fd.setVisible(true);
    //fd.show();

    }else if("保存".equals(comm)){

    }else if("另存".equals(comm)){

    }else if("退出".equals(comm)){

    }else if("撤销".equals(comm)){

    }else if("剪切".equals(comm)){

    }else if("复制".equals(comm)){

    }else if("粘贴".equals(comm)){

    }else if("删除".equals(comm)){

    }else if("查找".equals(comm)){

    }else if("替换".equals(comm)){

    }else if("全选".equals(comm)){

    }else{//关于记事本

    }
    }
    public static void main(String[] args) {
    new Notepad();
    }
    }
      

  3.   

    JTextArea jt = new JTextArea(12, 1000000000);
    public void actionPerformed(ActionEvent e) {
      String comm = e.getActionCommand();
      if(comm.equals("复制")){
         jt.copy();
      }
    }仔细阅读API有些方法很简单的
      

  4.   

    http://hi.baidu.com/wzbg/blog/item/2318eebfa071540b18d81f57.html
    http://blog.csdn.net/casularm/archive/2009/04/17/4087738.aspx这里的都可以实现。
      

  5.   

    import java.lang.*;
    import java.awt.*;
    import java.io.*;
    import java.awt.datatransfer.*;
    import java.awt.event.*;
    /**
     * <p>Title: 记事本</p>
     *
     * <p>Description: </p>
     *
     * <p>Copyright: Copyright (c) 2009</p>
     *
     * <p>Company: </p>
     *
     * @author not attributable
     * @version 1.0
     */
    public  class  EditorFrame extends Frame implements ActionListener
    {
            TextArea textArea=new TextArea();//用来编辑的文本区
            MenuBar menuBar=new MenuBar();//菜单栏        Menu fileMenu=new Menu("文件");//文件菜单        /*文件下拉菜单中的新建、打开、保存、另存为和退出等选项*/        MenuItem newItem=new MenuItem("新建");
            MenuItem openItem=new MenuItem("打开");
            MenuItem saveItem=new MenuItem("保存");
            MenuItem saveAsItem=new MenuItem("另存为");
            MenuItem exitItem=new MenuItem("退出");        /*编辑菜单和她的子菜单全选、复制、剪切、粘贴等选项*/        Menu editMenu=new Menu("编辑");//编辑菜单        MenuItem selectItem=new MenuItem("全选");
            MenuItem copyItem=new MenuItem("复制");
            MenuItem cutItem=new MenuItem("剪切");
            MenuItem pasteItem=new MenuItem("粘贴");        /*格式菜单和它的子菜单自动换行、字体、颜色设置*/        Menu formatMenu=new Menu("格式");//格式菜单        MenuItem newlineItem=new MenuItem("自动换行");
            MenuItem fontItem=new MenuItem("字体");
            MenuItem colorItem=new MenuItem("颜色设置");        /*查看菜单和它的子菜单状态栏*/        Menu seeMenu=new Menu("查看");//查看菜单        MenuItem statusItem=new MenuItem("状态栏");        /*帮助菜单和它的子菜单帮助、关于记事本*/        Menu helpMenu=new Menu("帮助");//帮助菜单        MenuItem helpItem=new MenuItem("帮助");
            MenuItem aboutItem=new MenuItem("关于记事本");
            String fileName="NoName";//设置默认的文件名
            Toolkit toolkit=Toolkit.getDefaultToolkit();//获取默认工具包。        Clipboard clipBoard = toolkit.getSystemClipboard(); //获取系统剪切板
            //public class Clipboardextends Object    此类实现一种使用剪切/复制/粘贴操作传输数据的机制。
            //获取系统 Clipboard 的一个实例,该 Clipboard 与本机平台提供的剪贴板工具相互作用。该剪贴板使数据能够在
            //Java 应用程序和使用本机剪贴板工具的本机应用程序之间传输。        /*打开文件对话框和保存文件对话框*/        FileDialog openFileDialog = new FileDialog(this, "Open File",
                                                       FileDialog.LOAD);
            FileDialog saveAsFileDialog = new FileDialog(this, "Save File As",
                                                         FileDialog.SAVE);    public EditorFrame() {
            setTitle("自编笔记本");
            setFont(new Font("Times New Roman", Font.PLAIN, 13));
            setBackground(Color.white);
            setSize(888, 666);        /*在窗口中添加菜单栏*/        fileMenu.add(newItem);
            fileMenu.add(openItem);
            fileMenu.addSeparator(); //分割线
            fileMenu.add(saveItem);
            fileMenu.add(saveAsItem);
            fileMenu.addSeparator();
            fileMenu.add(exitItem);        editMenu.add(selectItem);
            fileMenu.addSeparator();
            editMenu.add(copyItem);
            editMenu.add(cutItem);
            editMenu.add(pasteItem);        formatMenu.add(newlineItem);
            formatMenu.add(fontItem);
            formatMenu.add(colorItem);        seeMenu.add(statusItem);        helpMenu.add(helpItem);
            helpMenu.add(aboutItem);        menuBar.add(fileMenu);
            menuBar.add(editMenu);
            menuBar.add(formatMenu);
            menuBar.add(seeMenu);
            menuBar.add(helpMenu);
            setMenuBar(menuBar);
            add(textArea);        addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            }); //关闭窗口事件        /*注册各个菜单项的事件监听器*/        newItem.addActionListener(this);
            openItem.addActionListener(this);
            saveItem.addActionListener(this);
            saveAsItem.addActionListener(this);
            exitItem.addActionListener(this);
            selectItem.addActionListener(this);
            copyItem.addActionListener(this);
            cutItem.addActionListener(this);
            pasteItem.addActionListener(this);    }
        public void actionPerformed(ActionEvent e)
        {
            Object eventSource = e.getSource(); //利用事件源判断被单击的菜单项&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
            if (eventSource == newItem) {
                textArea.setText(" ");
            } else if (eventSource == openItem) {
                openFileDialog.setVisible(true);
                fileName = openFileDialog.getDirectory() + openFileDialog.getFile();
                //getDirectory()获取所选文件的路径,getFile()获取所选文件的文件名
                if (fileName != null)
                    readFile(fileName);
            } else if (eventSource == saveItem) {
                if (fileName != null)
                    writeFile(fileName);
            } else if (eventSource == saveAsItem) {
                saveAsFileDialog.setVisible(true);
                fileName = saveAsFileDialog.getDirectory() +
                           saveAsFileDialog.getFile();
                if (fileName != null)
                    writeFile(fileName);
            } else if (eventSource == selectItem) {
                textArea.selectAll(); //全选
            } else if (eventSource == copyItem) {
                String text = textArea.getSelectedText(); //复制
                StringSelection selection = new StringSelection(text); //StringSelection(String data)
                //创建能传输指定 String 的 Transferable。
                clipBoard.setContents(selection, null);
                /*
                 * setContents(Transferable contents, ClipboardOwner owner)
                 将剪贴板的当前内容设置到指定的 transferable 对象,并将指定的剪贴板所有者作为新内容的所有者注册。
                 */
            } else if (eventSource == cutItem) { //剪切
                String text = textArea.getSelectedText();
                StringSelection selection = new StringSelection(text);
                clipBoard.setContents(selection, null);            /*剪切是用空串代替被选择的字符*/
                //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&            textArea.replaceRange("", textArea.getSelectionStart(),
                                      textArea.getSelectionEnd());
                //replaceRange(String s,int start,int end)用String指定的内容替换Start和end范围内的内容        } else if (eventSource == pasteItem) { //粘贴
                Transferable contents = clipBoard.getContents(this);
                if (contents == null)
                    return;
                String text = "";
                //text="";
                try {
                    text = (String) contents.getTransferData(DataFlavor.
                            stringFlavor);
                    //getTransferData(DataFlavor flavor) 返回一个对象,该对象表示将要被传输的数据。
                } catch (Exception exception) {}
                textArea.replaceRange(text, textArea.getSelectionStart(),
                                      textArea.getSelectionEnd());
            } else if (eventSource == exitItem) {
                System.exit(0);
            }
        }
            public void readFile(String fileName)
            {
                try {
                    File file = new File(fileName);
                    FileReader readIn = new FileReader(file); //FileReader(File file)
                    //在给定从中读取数据的 File 的情况下创建一个新 FileReader。
                    int size = (int) file.length();
                    int charsRead = 0;
                    char[] content = new char[size];
                    while (readIn.ready())
                        charsRead += readIn.read(content, charsRead, size - charsRead);
                    readIn.close();
        
                    textArea.setText(new String(content, 0, charsRead));
                } catch (IOException e) {
                    System.out.println("Error openint file");
                }
            }
            public void writeFile(String fileName)
            {
                try {
                    File file = new File(fileName);
                    FileWriter writeOut = new FileWriter(file);
                    writeOut.write(textArea.getText());
                    writeOut.close();
                } catch (IOException e) {
                    System.out.println("Error openint file");
                }
            }
        public static void main(String[] args)
        {
            Frame frame=new EditorFrame();
            frame.setVisible(true);
        }}