2015-07-31 3 views
0

Я создал всплывающий список как функцию автозаполнения в проекте текстового редактора, над которым я работаю, и у меня возникла проблема с настройкой местоположения этой поп-музыки список в точке текста набираются в компоненте JEditorPaneПоиск координат X и Y конца текста в 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 класс

как я могу найти этот пункт?

ответ

2

Не используйте JEditorPane. JEditorPane лучше всего использовать для отображения простого HTML.

Вместо этого я предлагаю вам использовать JTextPane для форматированного текста или JTextArea для обычного текста.

Вы можете отобразить всплывающее окно, основываясь на местоположении каретки:

int offset = textComponent.getCaretPostion(); 

Тогда вы получите прямоугольник, представляющее расположение каретки в текстовом компоненте:

Rectangle location = textComponent.modelToView(offset); 

Тогда вы может установить местоположение окна на основе прямоугольника:

window.setLocation(location.x, location.y + location.height); 
Смежные вопросы