Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    20

    Settare il valore di una variabile su un Action Listener

    Ciao a tutti ho un problema riguardante la modifica del valore di una variabile all'interno di un Action Listener.La mia applicazione Gui si compone di una Gui principale nella quale sono presenti otto bottoni ognuno dei quali rappresenta un test da effettuare.Premendo il primo bottone io attivo un listener che collegandosi ad un server si fa restituire una hashtable dalla quale mi faccio restituire i miei oggetti IdentificatoriClient che rappresentano un client in un enumeratore.Questo enumeratore lo passo ad una classe che estende JFrame che va a rappresentare tutti i client connessi tramite la quale premendo uno dei bottoni relativi al client io,all'interno del listener precedente,vado a settare una variabile IdentificatoreClient che passerò poi al server tramite un messaggio.Ora quando io faccio partire il listener mi creo all'interno di esso una nuova istanza di questa classe che rappresenta i client ma una volta apparsa la finestra il listener continua il ciclo senza dare la possibilità di scegliere tramite bottone il client su quale effettuare il test e di conseguenza modificare la variabile da passare al server successivamente nel proseguimento del mio listener.La classe che rappresenta i client implementa ActionListener per effettuare l'esecuzione dell'assegnazione della variabile una volta premuto il bottone.

    Cosa ci può essere che non va?


    Ringrazio chiunque mi possa aiutare

  2. #2
    Secondo me c'è un errore alla riga 743 del listener del client del terzo bottone in basso a destra della gui.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    20
    cioè?

  4. #4
    Non è che ho ben capito il tuo problema...
    Ma se usi una JDialog invece della JFrame e blocchi l'utente sulla finestra che apre finché non finisce le sue operazioni?
    Potresti postare, in caso, un po' di codice di questo listener per capire meglio?
    "Na' sedia te vojo tirà!"

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    20
    Originariamente inviato da Brazonet
    Non è che ho ben capito il tuo problema...
    Ma se usi una JDialog invece della JFrame e blocchi l'utente sulla finestra che apre finché non finisce le sue operazioni?
    Potresti postare, in caso, un po' di codice di questo listener per capire meglio?

    Ecco qui il codice

    Quest è il gui principale

    codice:
    public class GuiClientAmministrativo extends JFrame {
    
    
    	private final JLabel areaUp;
    	private final  JPanel pannelloSopra;
    	private final JPanel pannelloSotto;
    	public final  JButton primoTest;
    	public final  JButton secondoTest;
    	public final  JButton terzoTest;
    	public final  JButton quartoTest;
    	public  final JButton quintoTest;
    	public final JButton sestoTest;
    	public final JButton settimoTest;
    	public final  JButton visualizzaClient;
    
    
    
    
    
    
    	public GuiClientAmministrativo(){
    
    		
    		/**
    		 * Creazione dell'oggetto Listener che si troverà in ascolto sugli 8 bottoni.
    		 */
    		ListenerTest azione=new ListenerTest();	
    		ListenerPrimoTest testUno=new ListenerPrimoTest();
    		ListenerSecondoTest testDue=new ListenerSecondoTest();
    		/**
    		 * Vado a creare il pannello principale 	
    		 */
    		this.setTitle("Client Amministrativo Di Controllo");
    		this.setSize(600,600);
    		this.setLocationRelativeTo(null);
    		final Container contentPane = this.getContentPane();
    		contentPane.setBackground(Color.WHITE);
    
    
    
    		primoTest = new JButton("Informazioni Pc");
    		primoTest.addActionListener(testUno);
    		primoTest.setActionCommand(testUno.PRIMOTEST);
    		secondoTest = new JButton("Test diVelocità di Trasmissione Dati Tcp");
    		secondoTest.addActionListener(testDue);
    		secondoTest.setActionCommand(testDue.SECONDOTEST);
    		terzoTest = new JButton("Test di Velocità di Trasmissione Dati Udp");
    		terzoTest.addActionListener(azione);
    		terzoTest.setActionCommand(azione.TERZOTEST);
    		quartoTest = new JButton("Test di Carico Distribuito");
    		quartoTest.addActionListener(azione);
    		quartoTest.setActionCommand(azione.QUARTOTEST);
    		quintoTest = new JButton("Test di Carico Centralizzato");
    		quintoTest.addActionListener(azione);
    		quintoTest.setActionCommand(azione.QUINTOTEST);
    
    		sestoTest = new JButton("Test di Carico ad Anello");
    		sestoTest.addActionListener(azione);
    		sestoTest.setActionCommand(azione.SESTOTEST);
    		settimoTest=new JButton("Test di Carico Ripetuti");
    		settimoTest.addActionListener(azione);
    		settimoTest.setActionCommand(azione.SETTIMOTEST);
    		visualizzaClient=new JButton("Client Connessi");
    		visualizzaClient.addActionListener(azione);
    		visualizzaClient.setActionCommand(azione.OTTAVOTEST);
    
    
    
    
    
    		
    
    
    		/**
    		 * Qui mi vado costruire il pannello che si trova in alto all'interno del quale vado ad
    		 * inserire il titolo e successivamente l'immagine.
    		 */
    
    
    		pannelloSopra=new JPanel();
    		pannelloSopra.setPreferredSize(new Dimension(400,400));
    		pannelloSopra.setOpaque(true);
    
    
    		
    		pannelloSotto=new JPanel();
    		pannelloSotto.setPreferredSize(new Dimension(200, 200));
    		pannelloSotto.setLayout(new GridLayout(3,3));
    
    
    		
    		areaUp=new JLabel("<html>Client Amministrativo </html>");
    		areaUp.setForeground(Color.BLACK);
    		areaUp.setBackground(Color.BLUE);
    		areaUp.setFont(new Font("Times New Roman", Font.ITALIC, 30));
    		pannelloSopra.add(areaUp);	
    
    
    
    
    		
    		pannelloSotto.add(primoTest);
    		pannelloSotto.add(secondoTest);
    		pannelloSotto.add(terzoTest);
    		pannelloSotto.add(quartoTest);
    		pannelloSotto.add(quintoTest);
    		pannelloSotto.add(sestoTest);
    		pannelloSotto.add(settimoTest);
    		pannelloSotto.add(visualizzaClient);
    
    
    
    
    
    
    
    
    		contentPane.add(pannelloSopra,BorderLayout.NORTH);
    		contentPane.add(pannelloSotto,BorderLayout.CENTER);
    		
    		this.setVisible(true);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    
    
    
    
    
    	}
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    	public static void main(String[] args) {
    
    		GuiClientAmministrativo amministrativo=new GuiClientAmministrativo();	
    
    	}
    Questa invece è la classe che rappresenta la finestra in cui compariranno i client

    codice:
    public class FinestraClientConnessi  extends JFrame implements ActionListener{
    
    
    	/**
    	 * 
    	 */
    	
    	private final JPanel pannello;
    	private final JLabel titolo;
    	private final JPanel resto;
    	private final JPanel pannelloPrimo;
    	private final JPanel pannelloSecondo;
    	private final JPanel pannelloTerzo;
    	private final JLabel primoClient;
    	private final JLabel secondoClient;
    	private final JLabel terzoClient;
    	public final JButton buttonPrimoClient;
    	public final JButton buttonSecondoClient;
    	public final JButton buttonTerzoClient;
    	public IdentificatoreClient client1;
    	public IdentificatoreClient client2;
    	public IdentificatoreClient client3;
    	public IdentificatoreClient clientScelto;
    	public boolean modifica;
    
    
    
    
    
    	public  FinestraClientConnessi(final Enumeration<IdentificatoreClient> listaClient) {
    		this.setTitle("Client Connessi");
    		this.setSize(400,400);
    		this.setLocationRelativeTo(null);
    		final Container contentPane = this.getContentPane();
    		contentPane.setBackground(Color.GRAY);
    		System.out.println("0");
    		
    
    
    		clientScelto=new IdentificatoreClient(null, null);
    		System.out.println("1");
    
    
    		while(listaClient.hasMoreElements()){
    			client1=listaClient.nextElement();
    			client2=listaClient.nextElement();
    			client3=listaClient.nextElement();	
    
    		}
    
    		System.out.println("2");
    
    		final String clientUno=client1.toString();
    		final String clientDue=client2.toString();
    		final String clientTre=client3.toString();
    
    		System.out.println("3");
    
    
    		
    		final String path="c:/Users/Daniele/Desktop/immagine.png";
    		final ImageIcon immagine=new ImageIcon(path);
    
    
    
    		
    
    		pannello=new JPanel();
    		pannello.setPreferredSize(new Dimension(50,50));
    		System.out.println("4");
    		
    		titolo=new JLabel("<html>Client Connessi </html>");
    		titolo.setForeground(Color.BLACK);
    		titolo.setFont(new Font("Times New Roman", Font.ITALIC, 30));
    		pannello.add(titolo);
    		System.out.println("5");
    
    		
    		pannelloPrimo=new JPanel();
    		pannelloPrimo.setPreferredSize(new Dimension(100,100));
    		System.out.println("6");
    		
    
    		buttonPrimoClient=new JButton(immagine);
    		buttonPrimoClient.setPreferredSize(new Dimension(50,50));
    		buttonPrimoClient.addActionListener(this);
    		System.out.println("7");
    		primoClient=new JLabel(clientUno);
    		primoClient.setBackground(Color.GRAY);
    		primoClient.setForeground(Color.BLACK);
    		primoClient.setFont(new Font("Times New Roman", Font.ITALIC, 12));
    		System.out.println("8");
    		pannelloPrimo.add(buttonPrimoClient);
    		pannelloPrimo.add(primoClient);
    
    		System.out.println("9");
    		
    
    		pannelloSecondo=new JPanel();
    		pannelloSecondo.setPreferredSize(new Dimension(100,100));
    		System.out.println("10");
    		
    		buttonSecondoClient=new JButton(immagine);
    		buttonSecondoClient.setPreferredSize(new Dimension(50,50));
    		buttonSecondoClient.addActionListener(this);
    
    		System.out.println("11");
    		secondoClient=new JLabel(clientDue);
    		secondoClient.setBackground(Color.GRAY);
    		secondoClient.setForeground(Color.BLACK);
    		secondoClient.setFont(new Font("Times New Roman", Font.ITALIC, 12));
    		pannelloSecondo.add(buttonSecondoClient);
    		pannelloSecondo.add(secondoClient);
    		System.out.println("12");
    
    
    
    		
    
    
    
    
    		pannelloTerzo=new JPanel();
    		pannelloTerzo.setPreferredSize(new Dimension(100,100));
    		System.out.println("13");
    		buttonTerzoClient=new JButton(immagine);
    		buttonTerzoClient.setPreferredSize(new Dimension(50,50));
    		buttonTerzoClient.addActionListener(this);
    		System.out.println("14");
    		terzoClient=new JLabel(clientTre);
    		terzoClient.setBackground(Color.WHITE);
    		terzoClient.setForeground(Color.BLACK);
    		terzoClient.setFont(new Font("Times New Roman", Font.ITALIC, 12));
    		pannelloTerzo.add(buttonTerzoClient);
    		pannelloTerzo.add(terzoClient);
    
    		System.out.println("15");
    
    
    
    
    		resto=new JPanel();
    		resto.setPreferredSize(new Dimension(300,300));
    		resto.setLayout(new GridLayout(3,1));
    		resto.add(pannelloPrimo);
    		resto.add(pannelloSecondo);
    		resto.add(pannelloTerzo);
    
    		System.out.println("16");
    
    
    
    
    		System.out.println("17");
    
    
    
    
    
    
    
    
    		contentPane.add(pannello,BorderLayout.NORTH);
    		contentPane.add(resto);
    		System.out.println("18");
    		this.setVisible(true);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		System.out.println("19");
    
    	}
    
    
    
    
    
    	@Override
    
    	public void actionPerformed(final ActionEvent scelta) {
    		final JButton bottonePremuto=(JButton) scelta.getSource();	
    		if(bottonePremuto.equals(buttonPrimoClient)){
    			clientScelto=client1;
    			modifica=true;	
    		}
    		else if (bottonePremuto.equals(buttonSecondoClient)) {
    
    			clientScelto=client2;
    			modifica=true;	
    		}
    		else if(bottonePremuto.equals(buttonTerzoClient)){
    			clientScelto=client3;
    			modifica=true;
    
    		}
    		else modifica=false;
    		JOptionPane.showMessageDialog(null, "Nessuna scelta effettuata");
    
    
    	}
    
    
    
    
    
    }
    Qui c'è il listener relativo alla spinta del primo bottone nel gui amministrativo

    codice:
    public class ListenerPrimoTest implements ActionListener {
    
    
    	public static final int primotest=1;
    	public static final String PRIMOTEST = "primo";
    	private int portaAmmi;
    	
    
    
    
    	@Override
    	public void actionPerformed(ActionEvent primoEvento) {
    		System.out.println("1");
    		String premuto=primoEvento.getActionCommand();
    		if(premuto==PRIMOTEST){
    			System.out.println("2");
    			IdentificatoreClient clientAttivo=new IdentificatoreClient(null, null);
    			boolean modifico;
    			System.out.println("3");
    
    			Socket cac=null;
    			
    			Enumeration<IdentificatoreClient> clientPresenti=null;
    			System.out.println("4");
    			try {
    
    
    				InetSocketAddress indirizzoServer = new InetSocketAddress(
    						"localhost", 8004);
    				cac = new Socket();
    				cac.connect(indirizzoServer);
    
    
    			}
    
    			catch (Exception e) {
    				JOptionPane.showMessageDialog(null, "Connessione Rifiutata", "Errore", JOptionPane.ERROR_MESSAGE);
    				
    				System.exit(0);
    			}
    
    
    
    			System.out.println("5");
    
    
    			 portaAmmi = cac.getLocalPort();
    
    			
    			 
    			ObjectOutputStream outCa=null;	
    			ObjectInputStream inCa=null;
    			System.out.println("6");
    			try {
    
    
    
    
    				outCa = new ObjectOutputStream(cac.getOutputStream());
    				inCa= new ObjectInputStream(cac.getInputStream());
    
    			} 
    
    			catch (Exception e) {
    				JOptionPane.showMessageDialog(null,"Stream non creati", "Errore",JOptionPane.ERROR_MESSAGE);
    			}	
    
    			
    			System.out.println("Chiusa la socket ricezioneMess con successo!");		
    			Object messaggioTabellaClientD=null;		
    
    			System.out.println("7");			
    			
    			try {
    				messaggioTabellaClientD=inCa.readObject();
    			} catch (IOException e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    			} catch (ClassNotFoundException e1) {
    				// TODO Auto-generated catch block
    				e1.printStackTrace();
    			}
    
    			System.out.println("8");
    			
    			if(messaggioTabellaClientD instanceof MessTabellaClientDist){
    				MessTabellaClientDist tabellaClientD= (MessTabellaClientDist messaggioTabellaClientD;
    				
    				Hashtable<IdentificatoreClient, InformazioniPC> tabellaDistribuiti = tabellaClientD.getHashtableCD();
    
    				
    
    			
    				clientPresenti = tabellaDistribuiti.keys();
    				System.out.println("9");
    
    
    				
    
    				
    
    				}
    			
    			System.out.println("11");
    
    
    			FinestraClientConnessi clientConnessi=new FinestraClientConnessi(clientPresenti);
                 
    			System.out.println("12");
    
    			
    	 		modifico=clientConnessi.modifica;
    	        System.out.println(modifico);		
    			System.out.println("13");
    			
    			if(modifico==true){
    				System.out.println("14");
    				clientAttivo=clientConnessi.clientScelto;	
    
    
    
    				MessaggioFunzionalitaScelta funzione1=new MessaggioFunzionalitaScelta(primotest, clientAttivo,null);
    
    				try {
    					outCa.writeObject(funzione1);
    				} catch (IOException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    
    				try {
    					outCa.flush();
    				} catch (IOException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    				System.out.println("Chiusa la socket ricezioneMess con successo!");
    				
    
    				int portaAmministrativo=cac.getLocalPort();
    
    				try {
    					cac.close();
    				} catch (IOException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    				
    
    }
    
    }
    Il mio problema sta nel fatto che il listener continua la sua esecuzione senza aspettare che io dalla finestra dei client connessi modifico client scelto ed il parametro modifica settando quest'ultimo a true e poi passandoli al listener.Come posso fare e cosa c'è che non va?

  6. #6
    Te l'ho detto, non puoi usare la JDialog invece della JFrame?
    "Na' sedia te vojo tirà!"

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    20
    Originariamente inviato da Brazonet
    Te l'ho detto, non puoi usare la JDialog invece della JFrame?
    La JDialog al posto del JFrame usato per scegliere il client da passare poi come parametro?......e scusami l'ignoranza ma sono alle prime armi con le Swing,in che cosa si differenzia la JDialog rispetto al JFrame?


    Grazie dell'aiuto

  8. #8
    La JDialog è come un popup, è un frame che si apre di solito temporaneamente sopra un altro frame padre.

    Prova così:

    codice:
    JDialog finestra = new JDialog(framePadre, true); 
    finestra.setVisible(true);
    Se metti true come parametro del costruttore il focus rimane sul "popup" finché non viene invocato un setVisible(false);
    "Na' sedia te vojo tirà!"

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    20
    Originariamente inviato da Brazonet
    La JDialog è come un popup, è un frame che si apre di solito temporaneamente sopra un altro frame padre.

    Prova così:

    codice:
    JDialog finestra = new JDialog(framePadre, true); 
    finestra.setVisible(true);
    Se metti true come parametro del costruttore il focus rimane sul "popup" finché non viene invocato un setVisible(false);

    Ok.Quindi sostituisco il JFrame con il JDialog e gli passo come framePadre il frame che rappresenta il GuiClient amministrativo?....o gli passo il Frame relativo ai client connessi?

  10. #10
    Lo passi così:

    codice:
    GuiClientAmministrativo.this
    "Na' sedia te vojo tirà!"

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.