Так что эта проблема давно искала меня, и она эффективно делает мою игру неиграбельной, если она запущена. Ситуация такова, что у меня есть четыре элемента в моей GUI:Автоматическая прокрутка Java JTextPane перестает работать после выбора текста
private JPanel panel;
private JTextPane content;
private JScrollPane scroll;
private JTextField input;
Все это установка в BorderLayout, с политикой обновления, которая автоматически каретки прокручивает экран всякий раз, когда текст достигает дна. Однако, если я выберу любой текст в JTextPane, внезапно автопрокрутка перестанет работать, и любой новый текст, добавленный в панель, останется невидимым, пока пользователь не будет вручную прокручивать полосу прокрутки. Я пытаюсь повторно применить политику обновления каретки каждый раз, когда текст добавляется, но это не сработало. Я не знаю, как это исправить, и попытки google проблема была бесплодной. Для справки, здесь соответствующий код из конструктора:
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?
1) Для лучшей помощи рано, оставить [MCVE] или [Short, самодостаточной Правильный пример] (HTTP : //www.sscce.org/). 2) См. [Я должен избегать использования методов Set (Preferred | Maximum | Minimum) в Java Swing?] (Http://stackoverflow.com/q/7229226/418556) (Да.) –
Я новичок в это, поэтому я не совсем знаю правила, и смущающе я бы не назвал себя особенно сильным программистом, несмотря на то, что это моя будущая профессия. Когда я меняю setPreferredSize на просто setSize, он полностью прерывает мою программу, поскольку полоса прокрутки остается фиксированным размером, который составляет около 30 пикселей, независимо от параметров, которые я передаю методу. –