Visualizzazione dei risultati da 1 a 4 su 4

Discussione: finestre

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    132

    finestre

    Ciao a tutti, avrei un problema che pensavo fosse diffuso, ma al quale non riesco a trovare soluzione.
    Ho 2 finestre una con un bottone, che premuto scrive "ciao" sull'altra finestra.
    L' avevo risolto come sotto, ma poi mi sono accorto che funziona bene sulle macchine dove c'è netbeans, altrimenti da problemi , particolari problemi mi da windows 7.

    codice:
    // finestra 1 (principale)
    public final class finestraPrincipale extends FrameView {
    
              public static  boolean bottonePremuto= false;
    
             public class scrivi extends Thread{
                public scrivi(){
                }
                   @Override
                public void run() {          
                      while (finestra2aperta==true) { //boolean true quando fin.2  aperta                    chiusa
                if (bottonePremuto==true) {     //boolean quando premo bottone fin.2
                   System.out.println("ciao");
                }
            }
    
    }
    
    
    // finestra 2
    public final class finestra2 extends javax.swing.JFrame {
        
                    private void pulsanteMousePressed (java.awt.event.MouseEvent evt) {
                         finestraPrincipale.bottonePremuto=true;      
           }}
    Come ho detto a volte il Thread non esce dal while, non si accorge cioè che la condizione è diventata true.

    Ho provato anche così ma mi da errore :
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException



    codice:
    // finestra 1 (principale)
    public final class finestraPrincipale extends FrameView {
    
            public  class classeA {
                    public void provaA() {
                             System.out.println("  ciao  ");
               }
             }
    }
    
    
    // finestra 2
    public final class finestra2 extends javax.swing.JFrame {
        
       classeB {
              finestraPrincipale.classeA windowOne;
    
              classeB (finestraPrincipale.classeA windowOne){
                    this.windowOne = windowOne;
                    this.windowOne.provaA();
       }}
    
    
                    private void pulsanteMousePressed (java.awt.event.MouseEvent evt) {
                          classeB  b = new classeB(null);
                          b.windowOne.provaA();     
           }}
    Qualche suggerimento ?

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    132
    Dimenticavo, il JOptionPane non mi serve.
    Nella realtà la finestra 2 è complessa e non posso risolverla con un JOptionPane.

    grazie.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Non ho capito perchè utilizzi i Thread in quel modo...
    Comunque un IDE utilizzato in questo modo non fa altro che peggiorare la situazione.

    Hai 2 finestre grafiche, ma scrivi sul flusso di output standard? (il terminale/prompt dei comandi).

    Se hai solamente 2 JFrame dove ognuno di essi ha un bottone, la cosa è semplice.
    Ti sono sufficienti 2 JButton e 2 JTextArea (magari anche JLabel, visto che il testo è corto e non deve essere modificato).

    Una classe estenderà JFrame, posizionerà il suo JButton e la sua JLabel. Sempre questa classe crea un oggetto di un altra classe, che estende JFrame (la tua seconda finestra); al costruttore di quest'ultima come parametro passi "this" (cioè questo oggetto; l'oggetto della prima classe).
    Potresti disporre entrambe le classi del metodo scrivi(), ed al suo interno settare semplicemente il testo sulla JLabel.
    Il funzionamento sarà semplice:

    Premuto il bottone della classe A verrà chiamato il metodo scrivi() della classe B (lo chiami ovviamente tramite l'oggetto che hai creato prima, il secondo frame), e verrà passato un testo (vedi tu se farlo di default o meno); analogalmente, premendo il bottone della classe B verrà richiamato il metodo scrivi() della classe A; ovviamente, lo puoi chiamare grazie al parametro che hai passato prima tamite il costruttore.


    Queta potrebbe essere un idea. ^^

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    beh allora prova a vedere le JDialog o meglio in generale la guida oracle ad una rapida introduzione all'uso dei principali componenti swing.

    Mi spieghi a cosa ti servono i due thread (oltre al fatto che non tieni conto di quale thread voglia modificare robe oppure no)?
    Mi dai un'idea dell'insieme? Perché così si va ad intuito.

    Infine, ti invito a non usare l'IDE (anche se per queste cose la tentazione è forte) perché non hai chiaro come funziona la libreria swing, queste domande unite al fatto che "uscendo da netbeans non riesci ad eseguire" confermano che l'IDE in questo caso crea più problemi di quanti ne risolva.

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.