我要做的是获取一个大字符串的片段。我尝试过使用indexOf(),但是当重复文本时,它完全失败了。我的最终目标是让用户能够在JTextPane中选择文本并仅对该部分文本进行样式化。我已经获得了与StyledDocuments一起使用的样式,我甚至将它设置为只设置用户选择的文本,但这是我的问题。
让我们说
String alltext =“快速的棕色狐狸跳过懒狗”;
用户突出显示的是String selectedtext
在这种情况下,我们只说
String selectedtext =“brown”;
我的目标是获取所选文本的偏移量和长度。对于这个特殊的句子,我可以简单地做:
int offset = alltext.indexOf(selectedtext);
int length = selectedtext.length();
这样可以正常工作。但是如果:
alltext = brownbrownbrownbrownbrown;
用户突出显示第三个棕色。如果我像以前那样做同样的事情,程序将只选择第一个棕色而不是真正的棕色,它将为第一个设置样式。
有没有办法绕过这个或替代从大块中获取一段String的位置?
谢谢!
答案 0 :(得分:1)
这是一个UI问题,而不是java.lang.String问题。
如果你发布你的用户界面代码,我们可以很好地回答。
答案 1 :(得分:0)
不确定我是否正确理解了您的问题。如果您说要检测用户何时选择了文本,然后将该文本设置为样式:
为了让某人选择文字,他们必须点击文字区域,拖动并释放点击。因此,附加一个MouseListener并实现mouseReleased方法来检查是否选择了任何文本,如果是,则将其保存为字符串:
public void mouseReleased(MouseEvent e) {
if (textArea.getSelectedText != null){ //see if they selected something
String s = textArea.getSelectedText();
//stylize s
}
编辑:如果你打算使用按钮,那就更容易了。将ActionListener添加到按钮和
public void ActionPerformed(ActionEvent e) {
if (textArea.getSelectedText() != null){ //see if they selected something
Font f = showStyleOptionsMenu();
textArea.getSelectedText().setFont(f);
}
showStyleOptionsMenu()
显示一个允许用户选择字体样式的新面板(或对话框或其他),然后将选择的字体返回给侦听器,将其应用于所选文本。