В дополнение к ответам VonC и Джошуа, стоит отметить, что isVisible()
- это метод в суперклассе Component
. Кроме того, javadoc заявляет:
Определяет, должен ли этот компонент быть видимым, когда его родительский элемент видим.
Компоненты изначально видимы, за исключением компонентов верхнего уровня, таких как объекты Frame.
Это означает, что до тех пор, пока JScrollPane
не будет добавлен в размерный кадр, вызов isVisible()
для JScrollBar
будет всегда возвращать true
.
Рассмотрим следующий SSCCE:
public static void main(String[] args) {
// creates a small table in a larger scroll pane
int size = 5;
JTable table = new JTable(makeData(size), makeHeadings(size));
JScrollPane pane = new JScrollPane(table);
pane.setPreferredSize(new Dimension(200, 200));
System.out.println(pane.getVerticalScrollBar().isVisible()); // prints true
JFrame frame = new JFrame("JScrollPane Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(pane);
System.out.println(pane.getVerticalScrollBar().isVisible()); // prints true
frame.pack();
System.out.println(pane.getVerticalScrollBar().isVisible()); // prints false
frame.setVisible(true);
System.out.println(pane.getVerticalScrollBar().isVisible()); // prints false
}
private static Object[] makeHeadings(int size) {
Object[] headings = new Object[size];
for (int i=0; i<size; i++){
headings[i] = i;
}
return headings;
}
private static Object[][] makeData(int size) {
Object[][] data = new Object[size][size];
for (int i=0; i<size; i++){
for (int j=0; j<size; j++){
data[i][j] = i*j;
}
}
return data;
}
Аналогично, стоит добавить, что если вы добавляете JScrollPane
к внутреннему фрейму, то scrollBar.isVisible()
будет работать только после добавления внутреннего фрейма к другому компоненту.