Ciao a tutti,
è da una settimana che cerco una soluzione a questo problema...

Ho un MenuItem nella barra dei menu della mia Applet, il quale ha
come unico scopo quello di incrementare un contatore.
Tale contatore indica il numero di JLabel che devono essere
visualizzate nel corpo dell'applet.

L'applet quindi, oltre alla barra dei menu, presenta un JPanel,
al cui interno visualizzo le varie label...
Ovviamente, dato che ad ogni incremento del contatore
aggiungo una label in una nuova riga, voglio che il pannello
sia scrollabile, così ho deciso di usare il JScrollPane.

Il problema è questo: nel metodo makeWindow, che richiamo
ogni qual volta incremento il contatore, creo le label,
le aggiungo al JPanel e quindi setto il viewPort del JScrollPane
al pannello... ma non si esegue il refresh del pannello! si
esegue solo se, nell'appletViewer di Eclispe che sto usando,
modifico la dimensione della finestra...

Ma la cosa più bella è che, se anziché estendere JApplet estendo
JFrame, tutto funziona regolarmente e perfettamente!

Aiutatemi, vi prego!

ecco il codice:

codice:
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JApplet;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.event.MenuEvent;
import javax.swing.event.MenuListener;


public class Test extends JApplet {

	private static final long serialVersionUID = 9064643650398109303L;

	public JPanel panel;
	public JScrollPane scrollPane;

	private JMenuBar bar;
	private JMenu menu;
	private JMenuItem nuovo;

    int num_labels;
    private JLabel labels[]; 
	
	
	public Test() {
		
		num_labels = 0;
		
		//menu bar
		bar = new JMenuBar(); // create menu bar
		setJMenuBar( bar ); // add menu bar to application
		
		//menu
		menu =  new JMenu( "Menu" ); // create menu to create a new Label
		menu.setMnemonic( 'M' ); // set mnemonic to M
		bar.add( menu ); // add menu to menu bar

		menu.addMenuListener(new MenuListener() {
			@Override
			public void menuSelected(MenuEvent arg0) {
				;
			}
			@Override
			public void menuDeselected(MenuEvent arg0) {
				//repaint applet
				Test.this.makeWindow();
			}
			@Override
			public void menuCanceled(MenuEvent arg0) {
				//repaint applet
				Test.this.makeWindow();
			}
		});
		
		//menu > nuovo
		nuovo = new JMenuItem( "Nuovo" );
		nuovo.setMnemonic( 'N' ); // set mnemonic to N
		menu.add( nuovo ); // add item nuovo to menu
		nuovo.addActionListener(
				new ActionListener() // anonymous inner class
				{
					public void actionPerformed( ActionEvent event ){

						//let's increment labels to show
						num_labels++;
						//repaint applet
						Test.this.makeWindow();
						
					} // end method actionPerformed
				} // end anonymous inner class
		); // end call to addActionListener
		
		makeWindow();
	}

	public void makeWindow(){
		
		panel = new JPanel(new GridLayout(10, 1));
		if(num_labels != 0)
			labels = new JLabel[num_labels];
		scrollPane = new JScrollPane();
		
		this.setContentPane(scrollPane);
		this.setSize(500,300);

		for(int i=0; i<num_labels; i++)
		{
			labels[i] = new JLabel("label: " + (i+1));
			panel.add(labels[i]);
		}

		scrollPane.setViewportView(panel);
		scrollPane.setWheelScrollingEnabled(true);
		scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
		scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);

		this.setVisible(true);
	}
	
	public void paint(Graphics g){
		super.paint(g);
		makeWindow();
	}
	
}