如果禁用setEditable,我怎样才能将Caret放入JTextArea?
当我需要Caret可见时的示例代码:
public void run(){
JFrame frame = new JFrame();
JTextArea text = new JTextArea();
text.setEditable(false);
String line = "added line";
text.append(line);
text.setCaretPosition(text.getCaretPosition() + line.length());
frame.getContentPane().add(text);
frame.setSize(300,300);
frame.setVisible(true);
}
我想要实现的是,当用户在TextArea中键入时,不得显示字符。键入的字符被重定向到OutputStream,并且接收到适当的InputStream,它将显示在TextArea中。这样可以正常工作,但由于setEditable(false),Caret被隐藏了。
答案 0 :(得分:12)
text.getCaret().setVisible(true)
和/或text.getCaret().setSelectionVisible(true)
答案 1 :(得分:2)
好吧,我在这里放了一个显示插入符号的代码片段,但是不要编辑JTextArea。我希望它对你有所帮助。这是一个与文本区域焦点相关的小技巧,当获得焦点时,版本被禁用;但是当它被丢失时,这个版本是可能的。这样,用户无法编辑它,但可以看到插入符号。
public void run() {
JFrame frame = new JFrame();
final JTextArea text = new JTextArea();
text.addFocusListener(new FocusListener() {
public void focusLost(FocusEvent fe) {
text.setEditable(true);
}
public void focusGained(FocusEvent fe) {
text.setEditable(false);
}
});
text.setEditable(true);
String line = "added line";
text.append(line);
text.setCaretPosition(text.getCaretPosition() + line.length());
frame.getContentPane().add(text);
frame.setSize(300,300);
frame.setVisible(true);
}
请注意,用户可以移动插入符,但他/她无法编辑文本
答案 2 :(得分:1)
我尝试了StanislavL最初提出的解决方案。但是,出现了其他问题。例如,离开JTextArea并稍后再聚焦之后,插入符号将再次变为不可见。
我怀疑插入符号没有像大多数人期望的那样实施。当我看到一些作者提议重新实现插入符号时,我通过以下小型侦听器成功实现了可见的插入符号行为:
textArea.getCaret().setVisible(true);
textArea.getCaret().setSelectionVisible(true);
textArea.addFocusListener(new FocusListener() {
@Override
public void focusGained(FocusEvent e) {
textArea.getCaret().setVisible(true);
textArea.getCaret().setSelectionVisible(true);
}
@Override
public void focusLost(FocusEvent e) {
textArea.getCaret().setSelectionVisible(true);
}
});
在上面的示例中,即使有人离开了文本区域,我还是决定保持选择可见。