簡體   English   中英

Eclipse Rcp-如何在ctrl上的文本編輯器中獲取自定義彈出菜單+文本上的空格

[英]Eclipse Rcp - How to get custom PopUp Menu in text editor on ctrl + space on text

我們已經看到,在Eclipse Java編輯器中,當對對象名執行(ctrl +空格)鍵時,將出現一個彈出菜單,顯示該類的方法和變量的列表。

就我而言,它不是Java編輯器。 但是我想實現如上所述的類似功能。

我有30個修復對象,當該對象出現在文本編輯器中並且在對象名稱的末尾使用(ctrl +空格)鍵時,我需要顯示帶有其成員變量的彈出菜單。

您能否指導我如何實現這一目標。

提前致謝。

您需要在SourceViewerConfiguration中注冊一個JFace內容助手,然后比較以下問題: 如何在Eclipse RCP中實現內容助手的文檔彈出窗口

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

這是此功能的官方Eclipse FAQ: http : //wiki.eclipse.org/FAQ_How_do_I_add_Content_Assist_to_my_editor%3F

使用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();
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM