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(); } }

 
			
			 
					
					
					
						 Rispondi quotando
  Rispondi quotando