У меня есть JScrollPane с JPanel, которая отлично работает, за исключением одного недостатка. Когда я запускаю программу, JScrollPane добавляется и очень хорошо отображается на родительской панели, однако содержимое внутри нее не отображается.
Если я изменяю размер окна или прокручиваю на JPanel содержимое появляется сразу. Я также проверил, и размеры правильны как для JPanel, так и для JScrollPane. Также вызывается перекраска, поэтому я не думаю, что я что-то там упускаю.
Я также посмотрел на этот вопрос, но он не помог: JScrollPane не показывает полосы прокрутки, когда JPanel добавлено
Использование пустых макетов преднамеренно, вместо этого я делаю свое собственное форматирование для учета экранов нескольких размеров. Спасибо заранее!
class FilesPanel extends JPanel
{
public JScrollPane scroller;
private FileHolderPanel holder;
public FilesPanel()
{
//setLayout(null);
setBackground(extraLight);
holder = new FileHolderPanel();
System.out.println(holder.getWidth() + " " + holder.getHeight() + " " + holder.getX() + " " + holder.getY() + " " + holder.getBounds());
scroller = new JScrollPane();
JViewport viewport = new JViewport();
viewport.add(holder);
scroller.setViewport(viewport);
scroller.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scroller.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scroller.setBorder(BorderFactory.createEmptyBorder());
scroller.setBackground(blue);
add(scroller);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
scroller.setLocation(0, 0);
scroller.setSize(filesWidth, frame.getHeight() - 40);
}
class FileHolderPanel extends JPanel
{
public FileHolderPanel()
{
setBackground(extraLight);
setLayout(null);
setVisible(true);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
}
}
}