Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    form con più pannelli

    E' possibile far aprire più pannelli all'interno di una form?
    Giuseppe SPECCHIO

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724
    in che linguaggio???
    è una domanda un po vaga...cmq in java si, basta aggiungere più pannelli ad un frame e gestirli con i metodi setvisible()

  3. #3
    il linguaggio non l'ho speicificato poiché mi sembrava superfluo essendo nel forum di Java! Comunque la mia questione fa riferimento all'uso di un JButton che in base al valore scelto in una casella di scelta multipla mi deve aprire un pannello:

    codice:
    //aggiunge un pannello al frame
    		contentPane = getContentPane();		
    		
    		//*** pannello Menu		
    		menuPanel mpanel = new menuPanel();
    		
    		//menu algoritmi
    		faceCombo = new JComboBox();
    		faceCombo.addItem("Gabriel Network");
    		faceCombo.addItem("Relative Neighborhood Network");
    		faceCombo.addItem("Clump Network");
    		faceCombo.addItem("Minimun Spanning Tree");
    		mpanel.add(faceCombo);
    		
    		//etichetta numero nodi
    		mpanel.add(new JLabel("Numero Nodi:", SwingConstants.RIGHT));
    		
    		//campo numero nodi
    		nNodeField = new IntTextField(nNode,3);
    		mpanel.add(nNodeField);
    		
    [...]
    
    		//crea pulsante
    		JButton generaButton = new JButton("Genera");
    		//associa un evento al bottone
    		generaButton.addActionListener(new
    			ActionListener(){
    				public void actionPerformed(ActionEvent event){
    					System.out.println("***DEBUG hai scelto "+ faceCombo.getSelectedItem() );
    					if(faceCombo.getSelectedItem()=="Gabriel Network"){
    						ggpanel = new ggPanel(HEIGHT, WIDTH, nNode, v);
    						contentPane.add(ggpanel, BorderLayout.CENTER);
    					}
    					System.out.println("***DEBUG hai inserito "+ nNodeField.getValue() +" nodi.");
    				}//actionPerformed
    			});//ActionListener
    		//aggiunge il pulsante al pannello
    		mpanel.add(generaButton);
    		
    		
    		//inserisce il pannello del menu a nord del frame
    		contentPane.add(mpanel, BorderLayout.NORTH);
    nell'ActionListener di generaButton vorrei far aprire il pannello associato al valore di faceCombo.getSelectedItem()
    Giuseppe SPECCHIO

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724
    come ti ho detto una soluzione potrebbe essere creare tutti i pannelli che ti servono, metterli uno sopra l'altro e poi visualizzare solo quello che serve con il metodo nomePannello.setVisible(true). Gli altri pannelli dovrai nasconderli con il metodo nomePannello.setvisible(false).

  5. #5
    Ho provato a modificare la gestione dell'evento nella seguente maniera:

    codice:
    		//crea pulsante
    		JButton generaButton = new JButton("Genera");
    
    		ggpanel = new ggPanel(HEIGHT, WIDTH, nNode, v);
    		ggpanel.setVisible(true);
    		contentPane.add(ggpanel, BorderLayout.CENTER);
    		rngpanel = new rngPanel(HEIGHT, WIDTH, nNode, v);
    		rngpanel.setVisible(true);
    		contentPane.add(rngpanel, BorderLayout.CENTER);
    		clumppanel = new clumpPanel(HEIGHT, WIDTH, nNode, v);
    		clumppanel.setVisible(true);
    		contentPane.add(clumppanel, BorderLayout.CENTER);
    		mstapanel = new mstaPanel(HEIGHT, WIDTH, nNode, v);
    		mstapanel.setVisible(true);
    		contentPane.add(mstapanel, BorderLayout.CENTER);
    
    		//associa un evento al bottone
    		generaButton.addActionListener(new
    			ActionListener(){
    				public void actionPerformed(ActionEvent event){
    					System.out.println("***DEBUG hai scelto "+ faceCombo.getSelectedItem() );
    					if(faceCombo.getSelectedItem()=="Gabriel Network"){
                             			rngpanel.setVisible(false);
                             			clumppanel.setVisible(false);
                             			mstapanel.setVisible(false);
                             			ggpanel.setVisible(true);
                             		}
                             		if(faceCombo.getSelectedItem()=="Relative Neighborhood Network"){
                             			ggpanel.setVisible(false);
                             			clumppanel.setVisible(false);
                             			mstapanel.setVisible(false);
                             			rngpanel.setVisible(true);
                             		}
                             		if(faceCombo.getSelectedItem()=="Clump Network"){
                             			ggpanel.setVisible(false);
                             			rngpanel.setVisible(false);
                             			mstapanel.setVisible(false);
                             			clumppanel.setVisible(true);
                             		}
                             		if(faceCombo.getSelectedItem()=="Minimun Spanning Tree"){
                             			ggpanel.setVisible(false);
                             			rngpanel.setVisible(false);
                             			clumppanel.setVisible(false);
                             			mstapanel.setVisible(true);
                            		}
    					System.out.println("***DEBUG hai inserito "+ nNodeField.getValue() +" nodi.");
    				}//actionPerformed
    			});//ActionListener
    Ma mi visualizza solo il grafo del Minimum Spanning Tree mentre se seleziono un altro grafo dall'elenco non mi visualizza nulla.
    Giuseppe SPECCHIO

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724
    il border layout nn penso sia quello più adatto, o setti il layout a null, crei una pannello contenitore e ci sbatti dentro tutti i pannelli, o il CardLayout
    che ti permette di mettere gli el uno sopra l'altro e di visualizzarne solo uno alla volta...

  7. #7
    Ho risolto in parte il problema con il JTabbedPane, in quanto riesco a far visualizzare tutti i grafi con una singola istanza, però ciò avviene sono quando avvio il programma con i valori di default.
    Ora vorrei farli cambiare in base ai valori inseriti nel pannello del menù, per fare ciò credo che debba gestire l'avento sul JButton Genera. Io ho cercato di definire le seguenti regole:

    codice:
    //crea pulsante
    		JButton generaButton = new JButton("Genera");
    
    		//associa un evento al bottone
    		generaButton.addActionListener(new
    			ActionListener(){
    				public void actionPerformed(ActionEvent event){
    					int k;
    				
    					System.out.println("***DEBUG hai inserito:\n"+
    						"minP = " + minPField.getValue() + "\n" +
    						"maxP = " + maxPField.getValue() + "\n" +
    						"minV = " + minVField.getValue() + "\n" +
    						"maxV = " + maxVField.getValue() + "\n" +
    						"Nodi = " + nNodeField.getValue() );
    						
    						
    						//creo l'area di simulazione
    						arena = new SimulationArena((alt-100), (lun-100));
    						
                                              	for(k=0; k<nNodeField.getValue(); k++){
                                                         n = new RWMHost(k, minPField.getValue(), maxPField.getValue(), 
                                                         		minVField.getValue(), maxVField.getValue());
                                                         n.setId();
                                                         if(k==0)
                                                         	n.setStato(true);
                                                         
                                                         arena.addNode(n); //inserisce un oggetto nella lista
                                                     
                                                    }//for k
                                                       
                                                    //avvio la simulazione per 10 sec
                                              	arena.startSimulation(10000);
                                              	
                                              	//acquisico la sequenza di nodi
                                              	nodes = arena.getNodes();
                                              	
                                              	//fermo la simulazione
                                              	arena.stopSimulation();
                                              	
                                              	for(k=0; k<nodes.length; k++){
                                              		//inserisce un oggetto nella lista
                                                    	v.add(nodes[k]);
                                                    }//for k
    
    				}//actionPerformed
    			});//ActionListener
    			
    		//aggiunge il pulsante al pannello
    		mpanel.add(generaButton);
    ma quando vado a compilare mi viene visualizzato il seguente messaggio di errore:

    codice:
    C:\Documents and Settings\Giuseppe\Documenti\Java Source\it\specchio\mra\JTabbedPane2.java:145: local variable v is accessed from within inner class; needs to be declared final
    v.add(nodes[k]);
    ^
    1 error
    Compilation interrupted
    Che vuol dire che la variabile deve essere definita final?
    L'ho fatto ma il problema si ripresenta! Inoltre si consideri che il Vector v l'ho instanziato tra le variabili di classe.
    Giuseppe SPECCHIO

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724
    è un problema con la classe inner, la variabile deve essere final


    From the JLS (§8.1.2):
    "Any local variable, formal method parameter or exception handler parameter
    used but not declared in an inner class must be declared final, and must be
    definitely assigned (§16) before the body of the inner class."

    When using local inner classes, any variables local to the method that are accessed from within the inner class must be declared final.

  9. #9

    ok ricevuto

    ok ricevuto il messaggio:

    codice:
    public class JTabbedPane2 extends JFrame {
    
    	[...]
    	private final SimulationArena arena;
    	//lista dei nodi
    	private final Vector v = new Vector();
    	[...]
    	
            public JTabbedPane2(int l, int a, int Np, Vector v){
            		
    		super("JTabbedPaneExample");
    			        
    [...]
    		
    		//crea pulsante
    		JButton generaButton = new JButton("Genera");
    
    		//associa un evento al bottone
    		generaButton.addActionListener(new
    			ActionListener(){
    				public void actionPerformed(ActionEvent event){
    					int k;
    				
    					System.out.println("***DEBUG hai inserito:\n"+
    						"minP = " + minPField.getValue() + "\n" +
    						"maxP = " + maxPField.getValue() + "\n" +
    						"minV = " + minVField.getValue() + "\n" +
    						"maxV = " + maxVField.getValue() + "\n" +
    						"Nodi = " + nNodeField.getValue() );
    						
    						
    						//creo l'area di simulazione
    						arena = new SimulationArena((alt-100), (lun-100));
    						
                                              	for(k=0; k<nNodeField.getValue(); k++){
                                                         n = new RWMHost(k, minPField.getValue(), maxPField.getValue(), 
                                                         		minVField.getValue(), maxVField.getValue());
                                                         n.setId();
                                                         if(k==0)
                                                         	n.setStato(true);
                                                         
                                                         arena.addNode(n); //inserisce un oggetto nella lista
                                                     
                                                    }//for k
                                                       
                                                    //avvio la simulazione per 10 sec
                                              	arena.startSimulation(10000);
                                              	
                                              	//acquisico la sequenza di nodi
                                              	nodes = arena.getNodes();
                                              	
                                              	//fermo la simulazione
                                              	arena.stopSimulation();
                                              	
                                              	for(k=0; k<nodes.length; k++){
                                              		//inserisce un oggetto nella lista
                                                    	v.add(nodes[k]);
                                                    }//for k
    				
    				}//actionPerformed
    			});//ActionListener
    			
    		//aggiunge il pulsante al pannello
    		mpanel.add(generaButton);
    		
    		[...]
    
    
             }
    ma la risposta è sempre la stessa:

    codice:
    c:\j2sdk1.4.2_04\bin\javac.exe -sourcepath "C:\Documents and Settings\Giuseppe\Documenti\Java Source" "C:\Documents and Settings\Giuseppe\Documenti\Java Source\it\specchio\mra\JTabbedPane2.java"
    C:\Documents and Settings\Giuseppe\Documenti\Java Source\it\specchio\mra\JTabbedPane2.java:120: cannot assign a value to final variable arena
    arena = new SimulationArena((alt-100), (lun-100));
    ^
    C:\Documents and Settings\Giuseppe\Documenti\Java Source\it\specchio\mra\JTabbedPane2.java:120: local variable alt is accessed from within inner class; needs to be declared final
    arena = new SimulationArena((alt-100), (lun-100));
    ^
    C:\Documents and Settings\Giuseppe\Documenti\Java Source\it\specchio\mra\JTabbedPane2.java:120: local variable lun is accessed from within inner class; needs to be declared final
    arena = new SimulationArena((alt-100), (lun-100));
    ^
    C:\Documents and Settings\Giuseppe\Documenti\Java Source\it\specchio\mra\JTabbedPane2.java:144: local variable v is accessed from within inner class; needs to be declared final
    v.add(nodes[k]);
    ^
    4 errors
    Compilation interrupted
    Giuseppe SPECCHIO

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    724
    le variabili final sono costanti non possono essere modificate, devi trovare un'altra soluzione se nn vuoi questi errori, magari usare una classe normale e nn una inner...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.