如何禁用在 JTextArea 中突出显示的能力
How to disable the ability to highlight in JTextArea
我正在寻找一种方法来禁用在 JTextArea 中突出显示的功能。
目前这是我的 JTextArea:
textArea1 = new JTextArea();
textArea1.setBorder(BorderFactory.createLineBorder(Color.black, 1));
DefaultCaret caret = (DefaultCaret) textArea1.getCaret(); // this line and the line below was inspired by a comment found here:
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
textArea1.setEditable(false);
JScrollPane scrollPane1 = new JScrollPane(textArea1);
我使用 DefaultCaret class 始终将 JTextArea 视点一直推到底部,textArea1.setEditable(false)
以阻止最终用户输入任何内容。
但是,如果我突出显示文本,DefaultCaret 方法就会停止工作。突出显示文本后,JTextArea 将不再粘在底部。
Once you highglight the text, the JTextArea does not stick to the bottom anymore.
问题是只有当插入符位于文档末尾时才会自动滚动。
严格来说,突出显示文本并不是问题所在。问题是用户在文本区域中的任意位置单击鼠标,因为这会改变插入符号的位置。
因此,如果您希望始终启用自动滚动,正确的解决方案是从文本区域中删除 MouseListener
和 MouseMouseMotionListener
,以防止所有与鼠标相关的 activity。
或者作为一个简单的 hack,您可以随时重置文档的插入符号位置:
textArea.addMouseListener( new MouseAdapter()
{
@Override
public void mouseReleased(MouseEvent e)
{
JTextArea textArea = (JTextArea)e.getSource();
textArea.setCaretPosition(textArea.getDocument().getLength());
}
});
编辑:
假设您有多个文本区域来实现相同的功能。您不需要为每个文本区域创建自定义侦听器。侦听器可以共享。代码可以写成:
MouseListener ml = new new MouseAdapter()
{
@Override
public void mouseReleased(MouseEvent e)
{
JTextArea textArea = (JTextArea)e.getSource();
textArea.setCaretPosition(textArea.getDocument().getLength());
}
};
textArea1.addMouseListener(ml);
textArea2.addMouseListener(ml);
我正在寻找一种方法来禁用在 JTextArea 中突出显示的功能。
目前这是我的 JTextArea:
textArea1 = new JTextArea();
textArea1.setBorder(BorderFactory.createLineBorder(Color.black, 1));
DefaultCaret caret = (DefaultCaret) textArea1.getCaret(); // this line and the line below was inspired by a comment found here:
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
textArea1.setEditable(false);
JScrollPane scrollPane1 = new JScrollPane(textArea1);
我使用 DefaultCaret class 始终将 JTextArea 视点一直推到底部,textArea1.setEditable(false)
以阻止最终用户输入任何内容。
但是,如果我突出显示文本,DefaultCaret 方法就会停止工作。突出显示文本后,JTextArea 将不再粘在底部。
Once you highglight the text, the JTextArea does not stick to the bottom anymore.
问题是只有当插入符位于文档末尾时才会自动滚动。
严格来说,突出显示文本并不是问题所在。问题是用户在文本区域中的任意位置单击鼠标,因为这会改变插入符号的位置。
因此,如果您希望始终启用自动滚动,正确的解决方案是从文本区域中删除 MouseListener
和 MouseMouseMotionListener
,以防止所有与鼠标相关的 activity。
或者作为一个简单的 hack,您可以随时重置文档的插入符号位置:
textArea.addMouseListener( new MouseAdapter()
{
@Override
public void mouseReleased(MouseEvent e)
{
JTextArea textArea = (JTextArea)e.getSource();
textArea.setCaretPosition(textArea.getDocument().getLength());
}
});
编辑:
假设您有多个文本区域来实现相同的功能。您不需要为每个文本区域创建自定义侦听器。侦听器可以共享。代码可以写成:
MouseListener ml = new new MouseAdapter()
{
@Override
public void mouseReleased(MouseEvent e)
{
JTextArea textArea = (JTextArea)e.getSource();
textArea.setCaretPosition(textArea.getDocument().getLength());
}
};
textArea1.addMouseListener(ml);
textArea2.addMouseListener(ml);