Используйте абсолютный макет внутри JScrollPane

Мне нужно использовать JScrollPane с абсолютным макетом. Я знаю, что использование setLayout (null )вообще не рекомендуется. Я читал, что если вы хотите использовать абсолютный макет с JScrollPane, необходимо установить свойство предпочтительного размера элементов внутри, чтобы JScrollPane мог вычислить его размер.

Я пробовал следующий код, изменяющий порядок и размеры элементов, но я не могу понять, где я ошибся.

import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;


public class frame extends JFrame {

private JPanel contentPane;
private JScrollPane scrollPane;

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                frame frame = new frame();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

public frame() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setLayout(null);
    setContentPane(contentPane);

    JPanel panel = new JPanel();
    panel.setBackground(Color.red);
    panel.setBounds(0,0,600,600);
    panel.setPreferredSize(new Dimension(420,280));

    scrollPane = new JScrollPane(panel);
    scrollPane.setBounds(0, 0, 600, 600);
    scrollPane.setLayout(null);
    scrollPane.setBackground(Color.green);

    scrollPane.add(panel);
    scrollPane.setPreferredSize(new Dimension(450,300));
    contentPane.add(scrollPane);
}
}

Почему setPreferredSize работает неправильно? Заранее спасибо.

5
задан mKorbel 17 August 2012 в 06:12
поделиться