Почему она показывает полосу прокрутки до JScrollPane, когда мы используем setPreferredSize для JPanel, который добавляется в JScrollPane - PullRequest
1 голос
/ 01 февраля 2012

Пожалуйста, смотрите следующий блок кода

import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
public class test extends JFrame {
    public test(){

    this.setBounds(0,0,300,700);

    JPanel pnltemp= new JPanel();

    //pnltemp.setBounds(0,0,400,1000);
    pnltemp.setPreferredSize(new Dimension(400,1000));

    JScrollPane scrtemp= new JScrollPane();


    scrtemp.getViewport().add(pnltemp);
    this.getContentPane().add(scrtemp);

    this.getContentPane().add(scrtemp);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);

}

public static void main(String args[]){
    new test();

}
}
  1. Когда мы запускаем вышеуказанный код, комментируя "pnltemp.setBounds (0,0,400,1000);"и заменив его на «pnltemp.setPreferredSize (new Dimension (400,1000));»окно показывает горизонтальные и вертикальные полосы прокрутки.но когда мы запускаем ту же программу, комментируя «pnltemp.setPreferredSize (new Dimension (400,1000));»и заменяя его "pnltemp.setBounds (0,0,400,1000)", окно не показывает горизонтальные и вертикальные полосы прокрутки.

почему одна и та же программа ведет себя по-разному, изменяя setBounds и метод setPreferredSize;поскольку эти два метода выглядят одинаково по поведению.

Или это что-то вроде этого, когда мы используем JScrollPane для получения полосы прокрутки, мы должны использовать setPreferredSize ();метод для компонента, который мы собираемся добавить в JScrollPane.

  1. Мой второй вопрос - когда мы добавляем pnltemp в scrtemp, то есть JPanel добавляется непосредственно в JScrollPane, тогда его не выдает ошибку, значит, когда мы говорим

scrtemp.add (pnltemp);

не выдает никакой ошибки, но также не показывает pnltemp и полосу прокрутки в scrtemp.но когда мы набираем scrtemp.getViewPort.add (pnltemp);

, это не дает никакой ошибки, но также показывает pnltemp и полосу прокрутки в scrtemp.

Я проверил это, назначив цвет фона JPanel и JScrollPane.

Кто-нибудь может это объяснить?

Спасибо!

1 Ответ

3 голосов
/ 01 февраля 2012

Из JScrollPane JavaDocs.

По умолчанию JScrollPane использует ScrollPaneLayout для обработки макета своих дочерних компонентов.ScrollPaneLayout определяет размер для представления в окне просмотра одним из двух способов:

  1. Если представление реализует Scrollable, используется комбинация getPreferredScrollableViewportSize, getScrollableTracksViewportWidth и getScrollableTracksViewportHeight,в противном случае используется
  2. getPreferredSize.
...