Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Chiudere un frame da un altro frame

    Salve!
    io ho 2 frame (chiamiamoli "a" e "b") ed ho bisogno di chiudere il frame "a" dal frame "b".
    Usando il classico a.setVisible(false); ottengo l'errore "non-static method setVisible(boolean) cannot be referenced from a static context" .. il che è anche giusto direi :\

    Come posso fare per aggirare questo problema? Ho letto di usare gli actionEvents ma non saprei come usarli

    Grazie!

  2. #2
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    il frame a chiama b.. durante la chiamata al costruttore di b passa se stesso (this)
    in b mi salvo il Frame a come variabile di classe ad esempio la chiamo "call"
    in qualsiasi punto di B (la gesatione di un pulsante un pulsante ad esempio) mi basta fare

    codice:
    call.dispose();
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  3. #3
    Originariamente inviato da morphy79
    il frame a chiama b.. durante la chiamata al costruttore di b passa se stesso (this)
    in b mi salvo il Frame a come variabile di classe ad esempio la chiamo "call"
    in qualsiasi punto di B (la gesatione di un pulsante un pulsante ad esempio) mi basta fare

    codice:
    call.dispose();
    Grazie per la risposta!
    Allora, ho provato a mettere in b:
    public a prova = new a(this);

    e mi dice
    "Cannot find symbol
    symbol: constructor a(nomepackage.b)
    location calss nomapackage a"

    il netbeans mi suggerisce quindi di creare in "a" il costruttore che accetti come parametro "b", e mi genera questo:

    codice:
        a(b aThis) {
            throw new UnsupportedOperationException("Not yet implemented");
        }
    eseguendo il programma ovviamente mi fà quel trow
    Posto un pò di codice per rendere meglio l'idea:

    classe "a", in realtà si chiama "attendere"
    codice:
    public class attendere extends javax.swing.JFrame{
        public attendere() {
            initComponents();
    }
    
        attendere(finestra_report aThis) {
            throw new UnsupportedOperationException("Not yet implemented");
        }
    
    [... tutto il codice per l'interfaccia grafica ed i vari metodi che ci ho messo ...]
    
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new attendere().setVisible(true);
                }
            });
        }
    
        // Variables declaration - do not modify                     
        private javax.swing.JButton jButton1;
        private javax.swing.JLabel jLabel1;
        private javax.swing.JLabel jLabel2;
        private javax.swing.JScrollPane jScrollPane1;
        public static javax.swing.JTextArea jTextArea1;
        // End of variables declaration                   
    
    }
    oltre a voler chiudere questo jFrame da un secondo jFrame mi serve anche chiuderlo da un thread che lavora per conto suo e ci può mettere anche molto tempo

    come si può fare?

  4. #4
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    no non ci siamo.. il codice non va...
    prima cosa le classi devono iniziare tutte con la maiuscola.. la tua ha la minuscola..
    seconda cosa a livello di consiglio, separa il main in una classe a parte che richiama il tuo Attendere..

    Qualcosa simile a questo..


    FRAME A
    codice:
    public class Attendere extends javax.swing.JFrame{
    
        public attendere() {
            initComponents();
    }
    
        Attendere(finestra_report aThis) {
            throw new UnsupportedOperationException("Not yet implemented");
        }
    
    [... tutto il codice per l'interfaccia grafica ed i vari metodi che ci ho messo ...]
    
        // Variables declaration - do not modify                     
        private javax.swing.JButton jButton1;
        private javax.swing.JLabel jLabel1;
        private javax.swing.JLabel jLabel2;
        private javax.swing.JScrollPane jScrollPane1;
        public static javax.swing.JTextArea jTextArea1;
        // End of variables declaration                   
    
    private void chiamaFrameB(){
     new FrameB(this)
    }
    
    }

    FRAME B
    codice:
    public class FrameB extends javax.swing.JFrame{
    
    Frame owner = null;
    
        public FrameB(Frame owner) {
            this.owner = owner;
            initComponents();
    }
    
        Attendere(finestra_report aThis) {
            throw new UnsupportedOperationException("Not yet implemented");
        }
    
    [... tutto il codice per l'interfaccia grafica ed i vari metodi che ci ho messo ...]
    
        // Variables declaration - do not modify                     
        private javax.swing.JButton jButton1;
        private javax.swing.JLabel jLabel1;
        private javax.swing.JLabel jLabel2;
        private javax.swing.JScrollPane jScrollPane1;
        public static javax.swing.JTextArea jTextArea1;
        // End of variables declaration                   
    
    private void chiudiFrameA(){
       owner.dispose()
    }
    
    }
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  5. #5
    Originariamente inviato da morphy79
    no non ci siamo.. il codice non va...
    prima cosa le classi devono iniziare tutte con la maiuscola.. la tua ha la minuscola..
    seconda cosa a livello di consiglio, separa il main in una classe a parte che richiama il tuo Attendere..

    Qualcosa simile a questo..


    FRAME A
    codice:
    public class Attendere extends javax.swing.JFrame{
    
        public attendere() {
            initComponents();
    }
    
        Attendere(finestra_report aThis) {
            throw new UnsupportedOperationException("Not yet implemented");
        }
    
    [... tutto il codice per l'interfaccia grafica ed i vari metodi che ci ho messo ...]
    
        // Variables declaration - do not modify                     
        private javax.swing.JButton jButton1;
        private javax.swing.JLabel jLabel1;
        private javax.swing.JLabel jLabel2;
        private javax.swing.JScrollPane jScrollPane1;
        public static javax.swing.JTextArea jTextArea1;
        // End of variables declaration                   
    
    private void chiamaFrameB(){
     new FrameB(this)
    }
    
    }

    FRAME B
    codice:
    public class FrameB extends javax.swing.JFrame{
    
    Frame owner = null;
    
        public FrameB(Frame owner) {
            this.owner = owner;
            initComponents();
    }
    
        Attendere(finestra_report aThis) {
            throw new UnsupportedOperationException("Not yet implemented");
        }
    
    [... tutto il codice per l'interfaccia grafica ed i vari metodi che ci ho messo ...]
    
        // Variables declaration - do not modify                     
        private javax.swing.JButton jButton1;
        private javax.swing.JLabel jLabel1;
        private javax.swing.JLabel jLabel2;
        private javax.swing.JScrollPane jScrollPane1;
        public static javax.swing.JTextArea jTextArea1;
        // End of variables declaration                   
    
    private void chiudiFrameA(){
       owner.dispose()
    }
    
    }
    non funziona
    ho provato a creare 2 jFrame nuovi per fare la prova, chiamati appunto "a" e "b" (pardon se li ho fatti minuscoli i nomi :P )

    classe "a.java":
    codice:
    public class a extends javax.swing.JFrame {
    
        public a() {
            initComponents();
            chiamaFrameB();
    
        }
    private void chiamaFrameB(){
        new b(this);
    }
    
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">
        private void initComponents() {
    
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            setTitle("Frame A");
    
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 400, Short.MAX_VALUE)
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 300, Short.MAX_VALUE)
            );
    
            pack();
        }// </editor-fold>
    
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new a().setVisible(true);
                }
            });
        }
        // Variables declaration - do not modify
        // End of variables declaration
    }
    classe "b.java":
    codice:
    import java.awt.Frame;
    
    public class b extends javax.swing.JFrame {
    Frame owner = null;
    
        public b(Frame owner) {
            this.owner = owner;
            initComponents();
            this.setVisible(true);
            chiudiFrameA();
    }
    
    private void chiudiFrameA(){
       System.out.println("Ci arrivo qui?");
       owner.dispose();
    }
    
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">
        private void initComponents() {
    
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            setTitle("Frame B");
    
            javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
            getContentPane().setLayout(layout);
            layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 400, Short.MAX_VALUE)
            );
            layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGap(0, 300, Short.MAX_VALUE)
            );
    
            pack();
        }// </editor-fold>
    
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                }
            });
        }
        // Variables declaration - do not modify
        // End of variables declaration
    }
    Dentro chiudiFrameA() ci arriva visto che viene visualizzato il messaggio "Ci arrivo qui?", però rimangono entrambi aperti

  6. #6
    risolto!

    il concetto è esattamente quello che mi avevi detto, solo che mi sono impastricciato nell'usarlo :P

    classe a.java:
    codice:
    /*
    * a.java
    *
    * Created on Jul 13, 2009, 6:36:33 AM
    */
    
    package javaapplication4;
    
    /**
    *
    * @author jeffrey
    */
    public class a extends javax.swing.JFrame {
    
    /** Creates new form a */
    public a() {
    initComponents();
    }
    
    /** This method is called from within the constructor to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the Form Editor.
    */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
    
    jButton1 = new javax.swing.JButton();
    jLabel1 = new javax.swing.JLabel();
    
    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    
    jButton1.setText("jButton1");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
    jButton1ActionPerformed(evt);
    }
    });
    
    jLabel1.setText("a");
    
    javax.swing.GroupLayout layout = new
    javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
    
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
    
    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
    .addGap(164, 164, 164)
    .addComponent(jLabel1))
    .addGroup(layout.createSequentialGroup()
    .addGap(134, 134, 134)
    .addComponent(jButton1)))
    .addContainerGap(178, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
    
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
    .addGap(35, 35, 35)
    .addComponent(jLabel1)
    .addGap(73, 73, 73)
    .addComponent(jButton1)
    .addContainerGap(152, Short.MAX_VALUE))
    );
    
    pack();
    }// </editor-fold>                        
    
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
    {                                         
    // Here is the main change
    b bform = new b(this);
    bform.setVisible(true);
    
    }                                        
    
    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
    public void run() {
    new a().setVisible(true);
    }
    });
    }
    
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    // End of variables declaration                   
    
    }
    classe b.java:
    codice:
    /*
    * b.java
    *
    * Created on Jul 13, 2009, 6:39:11 AM
    */
    
    package javaapplication4;
    
    /**
    *
    * @author jeffrey
    */
    public class b extends javax.swing.JFrame {
    
    private a aframe;
    
    /** Creates new form b */
    public b() {
    initComponents();
    }
    
    // This is the main part I added to get a reference to a from b
    public b(a newAframe) {
    aframe = newAframe;
    initComponents();
    }
    
    /** This method is called from within the constructor to
    * initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is
    * always regenerated by the Form Editor.
    */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
    
    jButton1 = new javax.swing.JButton();
    jLabel1 = new javax.swing.JLabel();
    
    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    
    jButton1.setText("jButton1");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
    jButton1ActionPerformed(evt);
    }
    });
    
    jLabel1.setText("b");
    
    javax.swing.GroupLayout layout = new
    javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
    
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
    
    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
    .addGap(117, 117, 117)
    .addComponent(jButton1))
    .addGroup(layout.createSequentialGroup()
    .addGap(137, 137, 137)
    .addComponent(jLabel1)))
    .addContainerGap(195, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
    
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
    .addGap(29, 29, 29)
    .addComponent(jLabel1)
    .addGap(67, 67, 67)
    .addComponent(jButton1)
    .addContainerGap(164, Short.MAX_VALUE))
    );
    
    pack();
    }// </editor-fold>                        
    
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
    {                                         
    if (aframe != null) {
    aframe.setVisible(false);
    }
    }                                        
    
    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
    public void run() {
    new b().setVisible(true);
    }
    });
    }
    
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    // End of variables declaration                   
    
    }
    un grazie a Jeffrey H. Coffield anche se penso che non leggerà mai questa frase :P

  7. #7
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    Originariamente inviato da AlexanderPD
    risolto!

    il concetto è esattamente quello che mi avevi detto, solo che mi sono impastricciato nell'usarlo :P
    perfetto spero ti sia tutto più chiaro ora
    mi raccomando con le maiuscole, non sono semplici banalità, ma fondamenti java, byeee
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

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.