如何将JTextArea中的选定文本转换为String?

时间:2013-04-07 05:40:56

标签: java swing listener highlight jtextarea

我正在研究一个带有java swing和layouts的简单文字处理器,我正在试图弄清楚如何制作单独的文本块粗体,斜体或不同的字体大小,而不是整个文本块的变化曾经在我的JTextArea。

当用户用鼠标突出显示JTextArea中的文本时,是否有某种方法可以初始化String?我会喜欢它,如果有一些ActionListener或JTextArea的东西可以检测所有这些并轻松保存任何字符串,但我不确定这是否可行。这样的事情会很棒:

String selectedtext;
JTextArea type;

class TextPanel extends JPanel implements ActionListener
{
    public TextPanel()
    {
        type = new JTextArea();
        type.addActionListener(this);
        this.add(type);
    }

    public void actionPerformed(ActionEvent e)
    {
        selectedtext = e.getSelected();
    }
}

5 个答案:

答案 0 :(得分:3)

JTextArea没有任何内置功能,但是:

为了让某人选择文字,他们必须点击文字区域,拖动并释放点击。因此,附加一个MouseListener并实现mouseReleased方法来检查是否选择了任何文本,如果是,则将其保存为字符串:

public void mouseReleased(MouseEvent e) {
    if (textArea.getSelectedText() != null) { // See if they selected something 
        String s = textArea.getSelectedText();
        // Do work with String s
    }
}

答案 1 :(得分:2)

您无法使用JTextArea完成此操作,您将需要支持丰富的文本显示的内容,例如JTextPanel,您需要为其定义样式,将这些样式应用于特定区域。

Here是创建样式的实用程序类的示例(链接以提供定义样式的示例)。 addNewStylechangeFont是两个最重要的参考方法。 addNewStyle方法显示了如何向文档添加预定义样式,您可以在插入时引用该样式(主要用于粘贴,如果您希望以格式过去)。 changeFont方法显示了如何创建样式并将其应用于某个区域(在该方法中,该区域是从0到文档的末尾 - 所以整个文档都是如此。)

您可能需要动态制作这些样式,因此如果存在(我还没有),您需要从该区域获取它们。所有这些都是通过StyledDocument

完成的

将带有样式的文本附加到StyledDocument(仅作为示例)的示例是:

styledDocument.insertString(
                styledDocument.getLength(), textToInsert,
                styledDocument.getStyle(styleName));

自从我与JTextPaneStyledDocuments合作以来已经有一段时间了,所以大部分内容都来自我完成工作的项目。我希望我能给你更多的信息,而不仅仅是一个起点。

答案 2 :(得分:1)

您可以使用JTextComponent#setCaretPosition后跟JTextComponent#moveCaretPosition来突出显示/选择

答案 3 :(得分:1)

为了检测JTextArea中的选择更改,最好使用CaretListener。

jTextArea.addCaretListener(new CaretListener(){
   public void caretUpdate(CaretEvent ce)
   {
        int dot=ce.getDot();
        int mark=ce.getMark();

              if(dot!=mark)
              selectedText=jTextArea.getSelectedText();
              else selectedText=null;
   }
});

现在,如果您想在拖动鼠标时对所选文本执行某些操作,则可以执行此操作,因为selectedText已更新。

答案 4 :(得分:-1)

JTextArea没有该功能。你应该看看 JEditorPane

它可以显示html,因此您可以使用粗体标签以及您需要的任何内容..