2012-02-13 12 views
5

Attualmente sto riscontrando un problema minore con una Jframe Java e un pulsante che non si aggiorna.Java JFrame che non aggiorna le impostazioni di un pulsante

Sto cercando di disattivare il pulsante di stampa fino a quando la stampa del nuovo JFrame si apre è fatto e che JFrame è chiuso ...

Il pulsante si disattiva solo se e quando si verifica una nuova finestra, ma la volontà non fino a quel momento, che può richiedere un po 'di tempo ....

ho impostato il pulsante per disattivare in questo modo: PrintBttn.setEnabled(false);

ho provato a chiamare mainPanel.revalidate(); mainPanel.repaint(); PrintBttn.revalidate(); PrintBttn.repaint così come una miscela di tali prodotti in quanto consigliato in altri forum ...

Sono perso al momento su questo e sul perché non disabilita il pulsante fino a quando non viene visualizzata una nuova finestra poiché la prima cosa che faccio è Disabilita come mostrato sopra, e poi passare attraverso e creare la nuova finestra .. ..

Grazie, Erik

+1

si prega di imparare le convenzioni di denominazione java e attenersi a loro – kleopatra

risposta

6

Molto probabilmente, si tratta di una domanda di rilascio del EDT per permettergli di ridipingere il pulsante disattivato.

In generale, sarà simile a questa:

PrintBttn.setEnabled(false); 
SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
     // Code to display the second JFrame goes here 
    } 
}; 
3

potrebbe essere che si era riuscito a mettere il primo fotogramma nel EDT troppo, fare guardare il codice, è questo ciò che si desidera veramente:

import java.awt.event.*; 

import javax.swing.*; 

public class TwoFrames 
{ 
    private JFrame frame1, frame2; 
    private JPanel panel1, panel2; 
    private JButton button1, button2, button3; 
    private ActionListener action; 

    public TwoFrames() 
    {    
     frame1 = new JFrame("Frame One"); 
     frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     frame2 = new JFrame("Frame Two"); 
     frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     panel1 = new JPanel();  

     action = new ActionListener() 
     { 
      public void actionPerformed(ActionEvent ae) 
      { 
       if (ae.getSource() == button1) 
       { 
        // Here goes your code for displaying your Second Frame. 
        SwingUtilities.invokeLater(new Runnable() 
        { 
         public void run() 
         { 
          if (!frame2.isShowing()) 
          {               
           panel2 = new JPanel(); 

           button2 = new JButton("Click Me to HIDE FRAME."); 
           button2.setHorizontalTextPosition(AbstractButton.CENTER); 
           button2.setVerticalTextPosition(AbstractButton.CENTER); 
           button2.addActionListener(action); 

           panel2.add(button2); 
           panel2.setOpaque(true); 
           frame2.setContentPane(panel2); 

           frame2.setSize(200, 200); 
           frame2.setLocationRelativeTo(null); 
           frame2.setVisible(true); 
          } 
         } 
        });    
        button3.setEnabled(false); 
       } 
       else if (ae.getSource() == button2) 
       { 
        frame2.dispose(); 
        button3.setEnabled(true); 
       } 
      }  
     }; 

     button1 = new JButton("Click Me to Display FRAME."); 
     button1.setHorizontalTextPosition(AbstractButton.CENTER); 
     button1.setVerticalTextPosition(AbstractButton.CENTER); 
     button1.addActionListener(action);   

     button3 = new JButton("Watch Me getting DISABLED"); 
     button3.setHorizontalTextPosition(AbstractButton.CENTER); 
     button3.setVerticalTextPosition(AbstractButton.CENTER); 
     button3.addActionListener(action); 

     panel1.add(button1); 
     panel1.add(button3); 
     panel1.setOpaque(true); 
     frame1.setContentPane(panel1);  

     frame1.setSize(200, 200);  

     frame1.setVisible(true); 
    } 

    public static void main(String... args) 
    { 
     // Here we are Scheducling a JOB for Event Dispatcher Thread. 
     SwingUtilities.invokeLater(new Runnable() 
     { 
      public void run()    
      { 
       new TwoFrames(); 
      } 
     }); 
    } 
} 
Problemi correlati