Visualizzazione dei risultati da 1 a 10 su 11

Hybrid View

  1. #1
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    E' piuttosto banale (non serve nemmeno un booleano).
    Un esempio completo.


    codice:
    import java.awt.*;
    import javax.swing.*;
    import java.awt.event.*;
    
    public class NoDoppi extends JFrame {
    
       private JFrame altraFinestra;
    
       public NoDoppi() {
          Container c = getContentPane();
          c.setLayout( null );
    
          JButton cmd = new JButton("Apri finestra");
          cmd.setBounds(20, 20, 120, 30);
          cmd.addActionListener( new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent ae) {
                apriFinestra();
             }
          });
    
          c.add( cmd );
          setTitle("Niente doppioni");
          setSize(800, 600);
          setLocationRelativeTo( null );
          setDefaultCloseOperation( EXIT_ON_CLOSE );
       }
    
       private void apriFinestra() {
          if (altraFinestra != null) {
             altraFinestra.setVisible( true );
             altraFinestra.toFront();
          } else {
             altraFinestra = new JFrame("Altra finestra");
             altraFinestra.add(new JLabel("Label"), BorderLayout.NORTH);
             altraFinestra.setSize(400, 400);
             altraFinestra.setLocationRelativeTo(this);
             altraFinestra.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
             altraFinestra.setVisible( true );
          }
       }
    
       public static void main(String[] args) {
          SwingUtilities.invokeLater( new Runnable() {
             @Override
             public void run() {
                NoDoppi nd = new NoDoppi();
                nd.setVisible( true );
             }
          });
       }
    }

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Ho capito....bisogna utilizzare un riferimento.

    Vorrei evitare di adottare una soluzione poco pulita , ossia di creare 25 riferimenti per le mie 25 finestre da controllare.

    Credevo di aver trovato una soluzione migliore , ma mi sono bloccato.

    Guarda cosa ho fatto io...

    Ho messo un riferimento nella finestra da controllare e un metodo per controllarlo :

    codice:
    public class FrameAggiungiArticolo extends JFrame {
    	
    	static boolean faaAperta; // IL RIFERIMENTO
    	
    	public FrameAggiungiArticolo(){
    		
    		super();
    		faaAperta = true;  //SETTATO A TRUE QUANDO SI INIZIALIZZA LA FINESTRA
    
    
            //ALTRO CODICE...
    
            }
    
            //ALTRO CODICE
    
    
    	public static boolean IsAperta(){
    		return faaAperta;
    	}
    
           public static void Chiudi(){
    		faaAperta = false;
    	}
    
    }
    Nell'ascoltatore controllo se il riferimento è true :

    codice:
    public class ascoltatoreBottoneAggiungiArticolo implements ActionListener {
    	
    	private InterfacciaPrincipale clickBottoneAggiungiArticolo;
    	
    	public ascoltatoreBottoneAggiungiArticolo(InterfacciaPrincipale clickBottoneAggiungiArticolo){
    		
    		this.clickBottoneAggiungiArticolo = clickBottoneAggiungiArticolo;
    	}
    	
    	public void actionPerformed(ActionEvent e){
    		
    		if(!FrameAggiungiArticolo.IsAperta())
    		new FrameAggiungiArticolo();
    		
    	}
    	
    
    
    }//ASCOLTATORE BOTTONE AGGIUNGI ARTICOLO
    Ed Ora la nota dolente :

    Dovrei settare il riferimento a false ogni volta che chiudo una finestra

    Il fatto è che ho scritto un ascoltatore generico (valido per più finestre) per la chiusura , ma non so come fare ad istanziare il riferimento a false .

    codice:
    package Ascoltatori;
    
    
    
    
    import interfacciaGrafica.FrameVendiArticolo;
    import interfacciaGrafica.InterfacciaPrincipale;
    import interfacciaGrafica.NotificaSalvataggioCambiamenti;
    
    
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JFrame;
    
    
    public class ascoltatoreChiudiFinestra implements ActionListener {
    	
    	private JFrame RifJFrame;
    	private InterfacciaPrincipale RifInterfacciaP;
    	private FrameVendiArticolo RifFrameVA;
    	private int tipoFinestra;
    	
    	public ascoltatoreChiudiFinestra(JFrame RifJFrame){
    		
    		this.RifJFrame = RifJFrame;		
    		tipoFinestra = 0;
    		
    	}
    	
    	public ascoltatoreChiudiFinestra(NotificaSalvataggioCambiamenti RifJFrame , InterfacciaPrincipale RifInterfacciaP){
    		
    		this.RifJFrame = RifJFrame;
    		this.RifInterfacciaP = RifInterfacciaP;
    		tipoFinestra = 1;
    		
    	}
    	
    	public ascoltatoreChiudiFinestra(FrameVendiArticolo RifFrameVA){
    		this.RifFrameVA = RifFrameVA;
    		tipoFinestra = 2;
    	}
    	
    	
    	public void actionPerformed(ActionEvent e){
    		
    		switch(tipoFinestra){
    		case 0 :
    			RifJFrame.dispose();
    			break;
    		case 1 :
    			RifJFrame.dispose();
    			RifInterfacciaP.dispose();
    			break;
    		case 2 :
    			RifFrameVA.dispose();
    			InterfacciaPrincipale.Jtable.setRowSelectionAllowed(true);
    		}		
    	}
    
    
    }//ASCOLTATORE PER CHIUDERE LE FINESTRE
    Cioè io ricevo un JFrame generico ; come faccio ad invocare quel metodo per quel tipo di JFrame?

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.