java - 如何将 jTextPane 中所有突出显示的单词更改为 jTextField 中给出的单词?

标签 java swing jtextpane

我编写了一个方法,用于查找 TextPane(名为 textContent)中与 TextField1 中给出的单词(您搜索的单词)相同的所有单词并将它们突出显示为黄色:

private void findAlleActionPerformed(java.awt.event.ActionEvent evt) {                                         
    int j = 0;
    int i = 0;
    int index = 0;
    String search = TextField1.getText();

    try{
        if(!TextField1.getText().isEmpty()){
            while(i != -1){
                    i = textContent.getText().indexOf(search, j);
                if(i == -1)
                    break;
                if(evt.getSource() == findAll || evt.getSource() == findAllButton){
                    textContent.select(i, i + search.length());   
                }
                Color c = Color.YELLOW;
                Style s = textContent.addStyle("TextBackground", null);
                StyleConstants.setBackground(s, c);
                StyledDocument d = textContent.getStyledDocument();
                d.setCharacterAttributes(textContent.getSelectionStart(), textContent.getSelectionEnd() - textContent.getSelectionStart(), textContent.getStyle("TextBackground"), false);
                j = i + search.length();
                index++;
            }
            if (index > 0){
                textContent.grabFocus();
                textContent.setCaretPosition(textContent.getText().indexOf(search, 0) );
                if(evt.getSource() == findAll || evt.getSource() == findAllButton){
                    status.setText("Term: " + TextField1.getText() + ". Number of apperances: " + index);
                } 
            } else {
                textContent.grabFocus();
                if(evt.getSource() == findAll || evt.getSource() == findAllButton){
                    status.setText("Term " + search + " was not found.");
                } 
            }
        }
    } catch (Exception e){
        status.setText("Error finding requested term.");
        System.err.print(e);
    }
}

现在我正在创建另一个方法 changeAllActionperformed() ,它将用 TextField2 中给出的单词替换所有突出显示的单词。我尝试使用 textContent.replaceSelection(TextField2.getText()); 来做到这一点,但问题是它将新单词放在第一个突出显示的单词前面,甚至没有删除它。我想要的是删除所有突出显示的单词并将它们全部替换为 Textfield2 中的新单词。我该怎么做?

最佳答案

有什么理由不能这么简单吗?

String replaced = textContent.getText().replace(search, TextField2.getText());
textContent.setText(replaced);

关于java - 如何将 jTextPane 中所有突出显示的单词更改为 jTextField 中给出的单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29458234/

相关文章:

java - Java拖拽时如何获取鼠标信息?

JAVA:将字符串调节为组合框项目,可能吗?

java - JTextPane 文本背景颜色不起作用

java - 如何使用文件 channel 和字节缓冲区将 double 写入文件?

java - 如何在Java中解析css文件

java - JibX : how to map a class and avoid it being outputed as XML node

java - JTextPane 正在将其父 Scrollpane 滚动到底部

java - Eclipse 在循环中执行 java 应用程序

java - 如何在以下代码中调整 ImageIcon 数组列表的大小

java - 我如何允许用户使用 JComboBox 更改他在 JTextPane 中的字体?