来自jTextPane的可点击文本

时间:2015-06-17 17:08:26

标签: jtextpane clickable

我正在实现一个将文本设置为jTextPane的函数。因此,当用户点击jTextPane中的某个字词时,该字词的定义应显示在jTextArea中。我知道如何在jTextPanejTextArea中显示文字。令我不安的是,当我点击jTextPane 时,整个文字被选中而不是选择那个特定的单词:'(。我做了一些研究我只能得到它的所有权利。这就是我所得到的:

private void jTextPane1MouseClicked(java.awt.event.MouseEvent evt) {                                        
        try
        {
           StyledDocument doc=(StyledDocument) jTextPane1.getDocument();;
            Element ele = doc.getCharacterElement(jTextPane1.viewToModel(evt.getPoint()));
            AttributeSet as = ele.getAttributes();
           /* Here after getting the word from jTextPane we print the definition 
             of that word in jTextArea... I got the code for this part */ 

        }
}

如何才能获得点击的单词?enter image description here

3 个答案:

答案 0 :(得分:1)

您可以使用viewToModel()方法(事实上您已经使用它)来检测点击点的charatcer位置。

然后使用javax.swing.text.Utilities课程。它有方法:

public static final int getWordStart(JTextComponent c, int offs)
public static final int getWordEnd(JTextComponent c, int offs)

只需传递从viewToModel()调用中获得的位置,然后获取所点击单词的开始和结束位置。然后你可以通过setSelectionStart()/ setSelectionEnd()调用它来传递单词start / end offset。

答案 1 :(得分:1)

遇到同样问题的人......这就是我解决问题的方法。 首先,将mouseClicked事件添加到jTextPane(这可以在netbeans的设计选项卡中完成)。编写代码以获取jTextPane中的单击文本。这是代码:

   private void jTextPane1MouseClicked(java.awt.event.MouseEvent evt) {                                        
   try
    {
            String wrd=null;
            int pt=jTextPane1.viewToModel(evt.getPoint());
            int spt=Utilities.getWordStart(jTextPane1,pt);
            int ept=Utilities.getWordEnd(jTextPane1,pt);
            jTextPane1.setSelectionStart(spt);
            jTextPane1.setSelectionEnd(ept);
            wrd=jTextPane1.getSelectedText();
            System.out.println("TextPane word="+wrd);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}    

答案 2 :(得分:0)

//You can get text without highlighting it like:

private void jTextPaneMouseClicked(java.awt.event.MouseEvent evt) {                                        
try
    {

            String word = null;
            int point = jTextPane.viewToModel(evt.getPoint());
            int startPoint = Utilities.getWordStart(jTextPane,point);
            int endPoint = Utilities.getWordEnd(jTextPane,point);

            word = jTextPane.getText(startPoint, endPoint-startPoint);
            System.out.println("Clicked word"+word);
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
}