如何添加 JFileChooser 以从 POPUP MENU 获取文本?

How Add JFileChooser to get txt from JPOPUP MENU?

我在这个任务中需要一些帮助。 单击 "find" 弹出窗口...。我想打开文件选择器并记录文本。 这行得通,但不是我想要的。

import javax.swing.*;
import javax.swing.text.DefaultEditorKit;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.lang.reflect.Method;


 public class Notepad extends JFrame {

     JFrame n = new JFrame();
     JTextArea espacio = new JTextArea();
     JPopupMenu mix = null;
     final JEditorPane document = new JEditorPane();


     public void body(){

    setTitle("Proyecto 2");
    setBounds(360,90,500,450);


    getContentPane().setLayout(null);


    document.setBounds(1,1,499,448);
    getContentPane().add(document, null);




    document.addMouseListener(new MouseAdapter() 
            {
                public void mousePressed(MouseEvent e) 
                {
                    if(javax.swing.SwingUtilities.isRightMouseButton(e)) {

                            mix = new JPopupMenu();

                            JComponent component=(JComponent)e.getComponent();

                            ActionMap actionMap=component.getActionMap();

                            Action action=actionMap.get(DefaultEditorKit.copyAction); 

                            JMenuItem menuItem=mix.add(action);

                            menuItem.setText("Copiar");

                            mix.addSeparator();
                            action=actionMap.get(DefaultEditorKit.pasteAction);
                            menuItem=mix.add(action);

                            menuItem.setText("Pegar");

                            mix.addSeparator();
                            action=actionMap.get(DefaultEditorKit.cutAction);

                            menuItem=mix.add(action);

                            menuItem.setText("Cortar");


                            mix.addSeparator();
                            action=actionMap.get(DefaultEditorKit.selectAllAction);
                            menuItem=mix.add(action);
                            menuItem.setText("Seleccionar Todo");

                            mix.addSeparator();

                            action=actionMap.get(buscador());

                            menuItem=mix.add(action);

                            menuItem.setText("Buscar");

                            mix.show(e.getComponent(),e.getX()-4,e.getY()-6); 

                    }
                }
            });





    setVisible(true); 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


     }




            private Object buscador() {
             JFileChooser find = new JFileChooser();

              int result = find.showOpenDialog(espacio);
           if (result==JFileChooser.APPROVE_OPTION) {
               File file = find.getSelectedFile();
               try {
                   document.setPage(file.toURI().toURL());
               } catch(Exception e) {
                   e.printStackTrace();
               }

            }
        return result;
            }






    public static void main(String[]args){

         Notepad n = new Notepad();
         n.body();

     }
 }

当我右键单击 JFileChooser 而不是 pop-up。

应该打开pop-up然后按"search"打开JFileChooser.

这是一个非常快速的回答,因为它没有提供 Action 接口的完整实现,但我相信它至少会让你朝着正确的方向前进。

首先修改这段代码:

action=actionMap.get(buscador());

为此:

action = buscador();

然后将您的 buscador 方法更改为:

private Action buscador() {
    return new Action() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            JFileChooser find = new JFileChooser();

            int result = find.showOpenDialog(espacio);
            if (result == JFileChooser.APPROVE_OPTION) {
                File file = find.getSelectedFile();
                try {
                    document.setPage(file.toURI().toURL());
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        }

        @Override
        public void addPropertyChangeListener(
                PropertyChangeListener listener) {
            // TODO Auto-generated method stub

        }

        @Override
        public Object getValue(String key) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public boolean isEnabled() {
            // TODO Auto-generated method stub
            return true;
        }

        @Override
        public void putValue(String key, Object value) {
            // TODO Auto-generated method stub

        }

        @Override
        public void removePropertyChangeListener(
                PropertyChangeListener listener) {
            // TODO Auto-generated method stub

        }

        @Override
        public void setEnabled(boolean b) {
            // TODO Auto-generated method stub

        }

    };
}