Ручки не появляются на полосах прокрутки

1

У меня есть класс, который расширяет JComponent под названием Canvas. Даже когда он больше, чем мой JScrollPane JViewport, ручки не появятся на полосах прокрутки, и я не могу прокручивать вниз Canvas. Код для моей панели прокрутки находится здесь:

    final JFrame frame = new JFrame("SketchPad");
    frame.setLayout(new BorderLayout());

    frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

    JScrollPane scrollPane = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    JViewport vp = scrollPane.getViewport();
    vp.setLayout(null);
    vp.setBackground(Color.BLUE);
    frame.getContentPane().add(scrollPane, BorderLayout.CENTER);

    canvas = new Canvas();

    canvas.setBounds(0, 0, w, h);

    vp.add(canvas);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);

Я что-то делаю с JScrollPane, или это что-то еще?

  • 1
    1) Для более быстрой помощи, опубликуйте MCVE (минимальный завершенный проверяемый пример) или SSCCE (короткий, автономный, правильный пример). 2) Графические интерфейсы Java должны работать на разных ОС, размерах экрана, разрешении экрана и т. Д. Как таковые, они не способствуют идеальной компоновке пикселей. Вместо этого используйте менеджеры компоновки или их комбинации вместе с отступами макета и границами для пробелов .
Теги:
swing
jscrollpane

1 ответ

4
Лучший ответ
vp.setLayout(null);

Не устанавливайте нулевой макет в окне просмотра. Полосы прокрутки появятся автоматически, когда предпочтительный размер компонента, добавленного в область просмотра прокрутки, больше, чем размер прокрутки.

Менеджер макетов мы использовали для определения предпочтительного размера (как правило, вы никогда не должны использовать нулевой макет).

Кроме того, не используйте Canvas, являющийся компонентом AWT. Используйте JPanel при использовании Swing. Или, если это пользовательский класс, тогда у него должно быть более описательное имя, чтобы избежать путаницы.

  • 0
    У меня все еще есть другой вопрос: когда я использую add() для добавления пользовательского класса Canvas в область просмотра панели прокрутки, он там, но прокрутка не прокручивает холст. Когда я использую new JScrollPane(canvas) , холст вообще не появляется.
  • 0
    Полосы прокрутки основаны на предпочтительном размере холста. Убедитесь, что ваш класс Canvas использует менеджеры компоновки или если вы выполняете пользовательскую getPreferredSize() вам необходимо переопределить метод getPreferredSize() класса, чтобы вернуть соответствующий размер класса.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню