Eclipse Rcp - 如何在文本编辑器上的ctrl + space上获取自定义PopUp菜单

时间:2014-06-13 07:34:48

标签: java eclipse-rcp

我们已经看到在eclipse Java Editor中,当我们在objectname上执行(ctrl + space)键时,会出现一个弹出菜单,显示该类的方法和变量列表。

就我而言,它不是java编辑器。但我希望实现与上述类似的功能。

我有30个修复对象,当该对象出现在文本编辑器中并且我在对象名称末尾执行(ctrl + space)键时,我需要显示弹出菜单及其成员变量。

请您指导我如何实现这一目标。

提前致谢。

2 个答案:

答案 0 :(得分:1)

您需要在SourceViewerConfiguration中注册JFace内容助手,比较以下问题:How to implement content assist's documentation popup in Eclipse RCP

此页面提供了更多示例:http://www.programcreek.com/java-api-examples/index.php?api=org.eclipse.jface.text.contentassist.IContentAssistant

这是此功能的官方Eclipse常见问题解答:http://wiki.eclipse.org/FAQ_How_do_I_add_Content_Assist_to_my_editor%3F

答案 1 :(得分:-1)

使用KeyStroke controlspace = KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, InputEvent.CTRL_MASK);

做类似这样的事情:

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.InputMap;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;

public class KeyTest extends JFrame {

    private JPanel contentPane;
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    KeyTest frame = new KeyTest();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public KeyTest() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JLabel lblClickHereAnd = new JLabel("Click here and press Ctrl+Space");
        contentPane.add(lblClickHereAnd, BorderLayout.NORTH);

         InputMap inputMap = contentPane.getInputMap();
         inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, InputEvent.CTRL_MASK), "foo");
         contentPane.getActionMap().put("foo", new AbstractAction() {
             public void actionPerformed(ActionEvent e) {
                 System.out.println("Key pressed");
             }
         });
         pack();
    }

}