Ehm... non è così semplice.
JPanel non implementa l'interfaccia Scrollable, quindi non è "adatta" di per sé ad essere scrollabile (quindi, ad essere inserita in un JScrollPane). Occorre lavorare un po' più a fondo.
Questa mia classe implementa Scrollable e rappresenta, appunto, un JPanel scrollabile:
codice:
package ft.scrollable;
import java.awt.*;
import javax.swing.*;
/**
*
* @author LeleFT
*/
public class ScrollablePanel extends JPanel implements Scrollable {
private Dimension minDimension;
public ScrollablePanel() {
this( new Dimension(0, 0) );
}
public ScrollablePanel(Dimension minDimension) {
this.minDimension = minDimension;
}
@Override
public Dimension getPreferredSize() { return getPreferredScrollableViewportSize(); }
@Override
public Dimension getPreferredScrollableViewportSize() {
Dimension ret = (minDimension != null) ? minDimension : new Dimension(0, 0);
Component[] content = getComponents();
for(Component c : content) {
Point loc = c.getLocation();
Dimension dim = c.getSize();
if ((loc.x + dim.width) > ret.width) ret.width = loc.x + dim.width;
if ((loc.y + dim.height) > ret.height) ret.height = loc.y + dim.height;
}
return ret;
}
@Override
public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
return 10;
}
@Override
public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
return 1;
}
@Override
public boolean getScrollableTracksViewportHeight() { return false; }
@Override
public boolean getScrollableTracksViewportWidth() { return false; }
}
Ciao.