【问题标题】:clickable text from jTextPane来自 jTextPane 的可点击文本
【发布时间】:2015-09-03 01:40:07
【问题描述】:

我正在实现一个将文本设置为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 */ 

        }
}

如何只获取点击的单词??

【问题讨论】:

    标签: jtextpane clickable


    【解决方案1】:

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

    然后使用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() 调用传递单词开始/结束偏移来选择它。

    【讨论】:

    • 成功了!!百万感谢你@StanislavL 我从几天开始就在这个特定的部分工作..
    【解决方案2】:

    遇到同样问题的人...这是我解决问题的方法。 首先,将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();
        }
    }    
    

    【讨论】:

      【解决方案3】:
      //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();
          }
      } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-14
        • 1970-01-01
        • 2018-01-24
        • 1970-01-01
        • 1970-01-01
        • 2019-10-25
        • 2014-07-25
        相关资源
        最近更新 更多