Прокрутка панели - Java

Узнай цену своей работы

Формулировка задачи:

Подскажите, пожалуйста, как исправить код. Нужно, чтобы форма содержала панель (на скрине синяя рамка). А эта панель, в свою очередь, содержала панель (красная рамка), которая будет прокручиваться в ней. Но при этом синяя рамка должна быть меньше размера формы. Пока выходит только так, как на скрине
import java.awt.*; 
import javax.swing.*; 
public class MyClass extends JFrame { 
    
    public MyClass() throws HeadlessException {
      JPanel panel1 = new JPanel(); 
      
      panel1.setBorder(BorderFactory.createLineBorder(Color.blue));
        JPanel panel = new JPanel(); 
        panel1.setBorder(BorderFactory.createLineBorder(Color.blue));

        panel.setBorder(BorderFactory.createLineBorder(Color.red));
        panel.setPreferredSize(new Dimension(800, 800)); 
        panel.setBackground(Color.WHITE);
       
        JScrollPane scroll = new JScrollPane(panel); 
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

        panel1.add(scroll); 
        add(panel1);
        panel1.setSize(300,300); 
        panel1.setVisible(true);
        setSize(500, 500); 
        setVisible(true); 
    } 
    
    public static void main(final String[] args) throws Exception { 
       java.awt.EventQueue.invokeLater(new Runnable() { 
            @Override public void run() 
            { new MyClass().setVisible(true); 
            } }); 
        
    }}

Решение задачи: «Прокрутка панели»

textual
Листинг программы
import java.awt.*; 
import javax.swing.*; 
public class MyClass extends JFrame { 
    
    public MyClass() throws HeadlessException {
      JPanel panel1 = new JPanel(); 
      panel1.setBorder(BorderFactory.createLineBorder(Color.blue));
      panel1.setSize(300,300);
      
      JPanel panel = new JPanel();   
      panel.setBorder(BorderFactory.createLineBorder(Color.red));
      panel.setPreferredSize(new Dimension(800, 800)); 
      panel.setBackground(Color.WHITE);
            
      JScrollPane scroll = new JScrollPane();
      scroll.setViewportView(panel);
      
      panel1.setLayout(new BorderLayout());
      panel1.add(scroll);   
      
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      setLayout(null);
      
         
       add(panel1);
       setSize(500, 500); 
       setVisible(true); 
    } 
    
    public static void main(final String[] args) throws Exception { 
       java.awt.EventQueue.invokeLater(new Runnable() { 
            @Override public void run() 
            { new MyClass().setVisible(true); 
            } }); 
        
    }}

Оцени полезность:

7   голосов , оценка 3.857 из 5