1

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

让我们这么说

String alltext = "敏捷的棕狐跳过了懒狗";

而用户强调的是String selectedtext

在这种情况下,让我们说

字符串 selectedtext = "棕色";

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

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

这将正常工作。但如果:

alltext = brownbrownbrownbrown;

用户突出显示第三个棕色。如果我像以前一样做同样的事情,程序只会选择第一个棕色而不是真正的棕色,它会为第一个设置样式。

有什么办法可以解决这个问题或替代从一个大块中获取一段字符串的位置吗?

谢谢!

4

2 回答 2

1

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

如果您发布您的 UI 代码,我们可能会很好地回答。

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

于 2013-04-07T20:48:34.187 回答
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()显示一个新面板(或对话框或其他),让用户选择字体样式,然后将选择的字体返回给侦听器,侦听器将其应用于选定的文本。

于 2013-04-07T20:47:53.640 回答