Я использую в своем приложении поле для комментариев, размер которого пользователь может изменять с помощью мыши. Это поле для комментариев содержит область прокрутки, которая вместо этого содержит JEditorPane, в который пользователь может вставить комментарий. Я добавил панель редактора внутри области прокрутки по следующей причине:
автоматическая прокрутка jeditorpane
Когда пользователь изменяет размер поля комментариев, я устанавливаю желаемый размер для JScrollPane и JEditorPane. Когда пользователь увеличивает размер поля комментариев, размер этих компонентов увеличивается по желанию, но когда размер поля комментариев уменьшается, размер JEditorPane не уменьшается даже после установки размера. Это приводит к полосам прокрутки внутри области прокрутки.
Я пробовал использовать setPreferrredSize, setSize, setMaximumSize для JEditorPane. Тем не менее размер панели редактора не уменьшается. Я пробовал вызвать в revalidate() или updateUI() после установки размера, но бесполезно.
Я использую Java 1.4.2.
Пожалуйста, поделитесь со мной своим мнением ....




Невозможно уменьшить размер JEditorPane в JScrollPane, а затем уменьшить его. Вместо этого вы можете использовать JTextArea.
На самом деле это возможно, Луискубал. Вот как
В JScrollPane добавьте ComponentListener для событий изменения размера
public static void main(String...args) {
//our test frame
JFrame frame = new JFrame("JEditorPane inside JScrollPane resizing");
frame.setLayout(new BorderLayout());
//our editing pane
final JEditorPane editor = new JEditorPane();
//our simple scroll pane
final JScrollPane scroller = new JScrollPane(editor);
//NOTE: this is the magic that is kind of a workaround
// you can also implement your own type of JScrollPane
// using the JScrollBar and a JViewport which is the
// preferred method of doing something like this the
// other option is to create a JEditorPane subclass that
// implements the Scrollable interface.
scroller.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
editor.setSize(new Dimension(
scroller.getWidth()-20,
scroller.getHeight()-20));
}
});
//just use up the entire frame area.
frame.add(scroller, BorderLayout.CENTER);
//quick and dirty close event handler
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(320, 240); //something not too big
frame.setLocationRelativeTo(null); //centers window on screen
frame.setVisible(true); // normally done in a SwingUtilities.invokeLater
}
Посмотрите, луискубал можно. Не спешите объявлять о том, что на Java невозможно. Swing api довольно гибкий и может сделать за вас большую часть работы. Однако, если вы используете JComponents так, как они не предназначены для использования, у вас возникнут проблемы и у вас будет два варианта.
как это могло получить Любые голосов? Совершенно неправильно ... (хотя, на удивление, работает ;-)
Я понимаю, что на этот вопрос уже давно ответили, но для справки в будущем все, что вам нужно сделать, это переопределить getScrollableTracksViewportWidth(), чтобы всегда возвращать истину, например.
JEditorPane pane = new JEditorPane() {
public boolean getScrollableTracksViewportWidth() {
return true;
}
};
panel.add(new JScrollPane(pane));
Это настолько чище, что пишущие слушатели! Большие пальцы вверх от меня.
JEditorPane уже реализует Scrollable. См. JEditorPane.