3

我正在开发一个带有 java swing 和 layouts 的简单文字处理器,我试图弄清楚如何使单个文本块变为粗体、斜体或不同的字体大小,而不是在我的整个文本块中一次更改文本区域。

当用户用鼠标突出显示 JTextArea 中的文本时,是否有某种方法可以初始化字符串?如果有某种 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();
    }
}
4

5 回答 5

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
    }
}
于 2013-04-07T05:46:09.987 回答
2

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

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

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

将带有样式的文本附加到 aStyledDocument的示例(纯粹是示例)是:

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

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

于 2013-04-07T05:53:51.523 回答
1

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

于 2013-04-07T07:47:36.543 回答
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 已更新。

于 2013-06-29T14:34:48.803 回答
-1

JTextArea 没有这种能力。你应该看看 JEditorPane

它可以显示 html ,因此您可以使用粗体标签和任何您需要的东西..

于 2013-04-07T05:48:12.053 回答