Pet*_*son 3 java swing jscrollpane
所以这个问题一直困扰着我很长一段时间,如果它被触发,它会有效地让我的游戏无法播放.情况是我的GUI中有四个项目:
private JPanel panel;
private JTextPane content;
private JScrollPane scroll;
private JTextField input;
Run Code Online (Sandbox Code Playgroud)
整个事情是一个BorderLayout的设置,与自动滚动屏幕文本时到达底部插入符更新策略.但是,如果我在JTextPane中选择任何文本,则突然自动滚动停止工作,并且添加到窗格的任何新文本将保持不可见,直到用户手动滚动滚动条.我每次尝试附加文本时都尝试重新应用插入符更新策略,但这不起作用.我不知道如何解决这个问题,并试图谷歌解决这个问题是徒劳无功的.作为参考,这里是构造函数的相关代码:
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);
Run Code Online (Sandbox Code Playgroud)
有没有可能的解决方案,或者这是Java AWT的限制?
我每次尝试附加文本时都尝试重新应用插入符更新策略,但这不起作用.
您还需要将插入符号重置为文档的末尾:
textPane.getDocument().insertString(...);
textPane.setCaretPosition(textArea.getDocument().getLength());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |