Se vuoi rendere scrollabile un pannello, devi gestire tutto a mano: ridimensionamenti e notifiche al JScrollPane.
Sto facendo delle prove. Ho preso anche come codice di esempio un tuo codice di un post:
codice:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class ProvaPannelli extends JFrame implements ActionListener {
private JPanel pannello;
private JScrollPane scroller;
private JButton cmdAggiungi;
private int count;
public ProvaPannelli() {
count = 0;
Container c = getContentPane();
c.setLayout( new BorderLayout() );
pannello = new JPanel();
pannello.setLayout( null );
scroller = new JScrollPane( pannello );
cmdAggiungi = new JButton("Aggiungi Label");
cmdAggiungi.addActionListener( this );
JPanel jpCmd = new JPanel( new FlowLayout(FlowLayout.CENTER, 10, 10) );
jpCmd.add( cmdAggiungi );
c.add(scroller, BorderLayout.CENTER);
c.add(jpCmd, BorderLayout.SOUTH);
setDefaultCloseOperation( EXIT_ON_CLOSE );
setTitle("Prova Pannelli");
setResizable( true );
setSize(800, 600);
setVisible( true );
}
public void actionPerformed(ActionEvent ae) {
JLabel lbl = new JLabel("Label numero " + (count+1));
lbl.setBounds(10, (count * 20)+1, 100, 20);
count++;
pannello.add( lbl );
Dimension d = pannello.getSize();
if (d.height < (count * 20)) {
// Devo ridimensionare il pannello
d.height = (count * 20);
pannello.setPreferredSize( d );
pannello.repaint();
pannello.doLayout();
scroller.getViewport().doLayout();
}
repaint();
doLayout();
}
public static void main(String[] args) {
ProvaPannelli pp = new ProvaPannelli();
}
}
che funziona perfettamente.
Tuttavia non riesco a far funzionare un mio codice (questa è solo una parte):
codice:
private void VisualizzaSchermi() {
if (!Schermi.isEmpty()){
int larghezzaSchermo = Schermi.get(0).getWidth();
int altezzaSchermo = Schermi.get(0).getHeight();
int nCol = panelScreens.getWidth() / larghezzaSchermo;
int spazio = (panelScreens.getWidth() - (nCol * larghezzaSchermo)) / (nCol + 2) ;
int cont = 0;
int x = spazio;
int y = 5;
double altezzaPannello = (Schermi.size() / nCol) * altezzaSchermo;
txtdebug2.setText(String.valueOf(altezzaPannello));
//panelScreens.setBackground(Color.BLUE);
for (int i = 0 ; i < Schermi.size(); i++) {
//Sposta coordinata x
if (cont > 0 && cont <= nCol) {
x += larghezzaSchermo + spazio;
}
//Va a capo e sposta coordinata y
if ( cont == nCol ) {
x = spazio;
y += altezzaSchermo + 5;
cont = 0;
}
//Stampa il pannello
Schermi.get(i).setLocation(x, y);
panelScreens.add(Schermi.get(i));
cont++;
}
panelScreens.repaint();
panelScreens.setPreferredSize( new Dimension( 800 , 1000));
panelScreens.doLayout();
scrollInfo.getViewport().doLayout();
repaint();
doLayout();
txtdebug.setText( String.valueOf(Schermi.size() ));
}
}
E' questa la parte in questione, puoi dargli un'occhiata?
Queste prove sono per studiarci un po' su ma credo farò un panel scrollabile come mi8hai suggerito
grazie