选择文本后,Java JTextPane 自动滚动停止工作

标签 java swing jscrollpane

所以这个问题困扰了我很长时间,如果它被触发,它实际上会使我的游戏无法玩。 情况是我的 GUI 中有四个项目:

private JPanel panel;
private JTextPane content;
private JScrollPane scroll;
private JTextField input;

整个事情是在 BorderLayout 中设置的,带有插入符更新策略,当文本到达底部时自动滚动屏幕。但是,如果我在 JTextPane 中选择任何文本,自动滚动会突然停止工作,并且添加到 Pane 的任何新文本都将保持不可见,直到用户手动滚动滚动条。每次附加文本时,我都尝试重新应用插入符号更新策略,但这没有用。我不知道如何解决这个问题,并且尝试用谷歌搜索这个问题也没有结果。 作为引用,这里是构造函数的相关代码:

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(width, height);
setResizable(false);
panel = new JPanel();

input = new JTextField(30);
input.setBackground(Color.BLACK);
input.setForeground(Color.GREEN);
input.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, width / 40));
input.addActionListener(this);

content = new JTextPane();
scroll = new JScrollPane(content);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scroll.setPreferredSize(new Dimension(width, height - 80));
scroll.setMinimumSize(new Dimension(640, 480));
scroll.setBorder(null);

content.setBackground(Color.BLACK);
content.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, width / 40));
content.setEditable(false);

DefaultCaret caret = (DefaultCaret) content.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);

panel.setLayout(new BorderLayout());
panel.add(scroll, BorderLayout.NORTH);
panel.add(input, BorderLayout.SOUTH);
panel.setBackground(Color.BLACK);

getContentPane().add(panel);

setVisible(true);

是否有可能的解决方案,或者这是 Java AWT 的限制?

最佳答案

I've attempted reapplying the caret update policy every time text is appended but that didn't work.

您还需要将插入符号重置为文档的末尾:

textPane.getDocument().insertString(...);
textPane.setCaretPosition(textArea.getDocument().getLength());

关于选择文本后,Java JTextPane 自动滚动停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33445889/

相关文章:

jquery - Popup Div隐藏在jscrollpane中

java - 使用 JScrollPane 将 BufferedImage 添加到 JFrame

java - 缓冲图像像素操作

java - 如何在 DefaultListModel 中而不是在 JList 中添加操作监听器

java setEnable(false) 不起作用

java - 根据 JComboBox 选择添加 JList 项目

java - jpanel 中的 jscrollpane

java - 使用 JSQLParser 从项目中选取多个

java - 使用 Cake 与 Clojure 一起构建 Java

java - UserTransaction.rollback 异常 HHH000451