我正在研究一个带有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();
}
}
答案 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是创建样式的实用程序类的示例(链接以提供定义样式的示例)。 addNewStyle
和changeFont
是两个最重要的参考方法。 addNewStyle
方法显示了如何向文档添加预定义样式,您可以在插入时引用该样式(主要用于粘贴,如果您希望以格式过去)。 changeFont
方法显示了如何创建样式并将其应用于某个区域(在该方法中,该区域是从0
到文档的末尾 - 所以整个文档都是如此。)
您可能需要动态制作这些样式,因此如果存在(我还没有),您需要从该区域获取它们。所有这些都是通过StyledDocument
将带有样式的文本附加到StyledDocument
(仅作为示例)的示例是:
styledDocument.insertString(
styledDocument.getLength(), textToInsert,
styledDocument.getStyle(styleName));
自从我与JTextPane
和StyledDocuments
合作以来已经有一段时间了,所以大部分内容都来自我完成工作的项目。我希望我能给你更多的信息,而不仅仅是一个起点。
答案 2 :(得分:1)
答案 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,因此您可以使用粗体标签以及您需要的任何内容..