2013-04-07 129 views
1

我想要做的是得到一个大的字符串段。我已经尝试过使用indexOf(),但是在重复文本时完全失败。我的最终目标是让用户能够选择JTextPane中的文本,并只将该部分文本风格化。我已经获得了与StyledDocuments一起使用的样式,并且我甚至已经将它设计为仅对用户选择的文本进行样式设置,但这是我的问题。如何从大块字符串中获取一行字符串?

假设

字符串alltext =“敏捷的棕色狐狸懒狗跳楼”;

的操作和用户的亮点是String selectedtext

在这种情况下,让我们只说

字符串selectedtext = “棕色”;

我的目标是获得选定文本的偏移量和长度。对于这个特定的句子,我可以简单地做:

int offset = alltext.indexOf(selectedtext); 
int length = selectedtext.length(); 

而且这将工作正常。但如果:

alltext = brownbrownbrownbrownbrown;

而且用户高亮显示第三褐色。如果我和以前一样做同样的事情,那么程序将会选择第一个棕色,而不是真正的棕色,它会对第一个棕色进行设计。

有没有解决这个任何方式或替代从大的块获取字符串的段的位置?

谢谢!

+0

大约有我认为在相关的两个答案(下就业2.0图标) – mKorbel 2013-04-07 20:47:54

+0

你为什么跟踪选择作为一个字符串的一些问题,并不能直接作为索引/作为通常进行抵消? JTextPane应该自动执行该操作。或者,换句话说:如果由于某种原因,你只能确定用户正在寻找什么字符串,就没有办法知道它是哪一个字符串。 – millimoose 2013-04-07 20:50:30

+0

如何从JTextPane获取索引值?有没有一种方法可以帮你吗? – applemavs 2013-04-07 20:55:55

回答

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()显示一个新的面板(或对话框或其他),让用户选择字体样式,然后返回选择到监听器的字体,它适用于选定的文本。

+0

请modelToView的/ viewToModel(文档/是AbstractDocument) – mKorbel 2013-04-07 20:48:44

+0

@mKorbel我不知道你说 – drewmoore 2013-04-07 20:50:15

+0

或者你可以只用['CaretListener']什么(http://docs.oracle.com/javase/7/文档/ API /使用javax /秋千/文本/ JTextComponent.html#addCaretListener(javax.swing.event.CaretListener)),而不是黑客使用这个鼠标事件 – millimoose 2013-04-07 20:53:54

1

这是一个UI问题,而不是一个java.lang.String问题。

如果您发布UI代码,我们可以回答好。

使用Swing,TextComponent和底层模型可能会有所帮助,从而为您提供当前选择的startend索引。

相关问题