来自 jTextPane 的可点击文本
clickable text from jTextPane
我正在实现一个将文本设置为 jTextPane
的函数。所以当用户点击 jTextPane
中的某个词时,该词的定义应该显示在 jTextArea
中。我知道如何在 jTextPane
和 jTextArea
中显示文本。令我困扰的是,当我单击 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 */
}
}
如何只获取点击的单词??
您可以使用viewToModel()
方法(实际上您已经使用过)来检测点击点的字符位置。
然后使用javax.swing.text.Utilities
class。它有方法:
public static final int getWordStart(JTextComponent c, int offs)
public static final int getWordEnd(JTextComponent c, int offs)
只需传递从viewToModel()
调用中获得的位置,就可以得到点击单词的开始和结束位置。然后你可以 select 通过 setSelectionStart()/setSelectionEnd() 调用传递单词 start/end offsets.
遇到同样问题的人...这是我解决的方法。
首先,将 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();
}
}
//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();
}
}
我正在实现一个将文本设置为 jTextPane
的函数。所以当用户点击 jTextPane
中的某个词时,该词的定义应该显示在 jTextArea
中。我知道如何在 jTextPane
和 jTextArea
中显示文本。令我困扰的是,当我单击 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 */
}
}
如何只获取点击的单词??
您可以使用viewToModel()
方法(实际上您已经使用过)来检测点击点的字符位置。
然后使用javax.swing.text.Utilities
class。它有方法:
public static final int getWordStart(JTextComponent c, int offs)
public static final int getWordEnd(JTextComponent c, int offs)
只需传递从viewToModel()
调用中获得的位置,就可以得到点击单词的开始和结束位置。然后你可以 select 通过 setSelectionStart()/setSelectionEnd() 调用传递单词 start/end offsets.
遇到同样问题的人...这是我解决的方法。
首先,将 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();
}
}
//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();
}
}