在 JeditorPane 中查找文本结尾的 X 和 Y 坐标

Finding the X and Y coordinates of end of text in JeditorPane

我在我正在处理的文本编辑器项目中创建了一个弹出列表作为自动完成功能,但我遇到了在输入文本时设置此弹出列表位置的问题JeditorPane 组件

这是我的代码(现在列表在框架底部打开):

    private void showPopUpWindow() {
    autoSuggestionPopUpWindow.getContentPane().add(suggestionsPanel);
    autoSuggestionPopUpWindow.setMinimumSize(new Dimension(textField.getWidth(), 30));
    autoSuggestionPopUpWindow.setSize(tW, tH);
    autoSuggestionPopUpWindow.setVisible(true);

    int windowX =0;
    int windowY =0;

    windowX = container.getX() + textField.getX() + 5;
    if (suggestionsPanel.getHeight() > autoSuggestionPopUpWindow.getMinimumSize().height) {
        windowY = container.getY() + textField.getY() + textField.getHeight() + autoSuggestionPopUpWindow.getMinimumSize().height;
    } else {
        windowY = container.getY() + textField.getY() + textField.getHeight() + autoSuggestionPopUpWindow.getHeight();
    }


    autoSuggestionPopUpWindow.setLocation(windowX, windowY);
    autoSuggestionPopUpWindow.setMinimumSize(new Dimension(textField.getWidth(), 30));
    autoSuggestionPopUpWindow.revalidate();
    autoSuggestionPopUpWindow.repaint();

}

对象 "autoSuggestionPopUpWindow" 是 JWindow 的一个实例 class

如何找到这个点?

不要使用 JEditorPane。 JEdi​​torPane 最适合用于显示简单的 HTML.

相反,我建议您对格式化文本使用 JTextPane,对纯文本使用 JTextArea

您可以根据插入符号的位置显示弹出窗口:

int offset = textComponent.getCaretPostion();

然后你得到代表插入符在文本组件中位置的矩形:

Rectangle location = textComponent.modelToView(offset);

然后可以根据矩形设置window的位置:

window.setLocation(location.x, location.y + location.height);