2012-02-13 21 views
5

Actualmente tengo un problema menor con Java Jframe y un botón que no se actualiza.Java JFrame no actualiza la configuración de un botón

Estoy tratando de desactivar el botón de impresión hasta que la impresión de la nueva JFrame se abre y se hace que JFrame se cierra ...

El botón sólo se desactivará si y cuando se produce una nueva ventana, pero lo hará no hasta entonces, lo que puede tomar un poco de tiempo ....

puse el botón para desactivar al hacer esto: PrintBttn.setEnabled(false);

he intentado llamar mainPanel.revalidate(); mainPanel.repaint(); PrintBttn.revalidate(); PrintBttn.repaint, así como una mezcla de los anteriores, ya que recomendado en otros foros ...

Estoy algo perdido en este momento y por qué no está desactivando el botón hasta que aparezca una nueva ventana ya que lo primero que hago es desactivarlo como se muestra arriba, y luego ir a través y crear la nueva ventana. ..

Gracias, Erik

+1

por favor aprenda las convenciones de nomenclatura de Java y adhiérase a ellas – kleopatra

Respuesta

6

lo más probable, es una cuestión de la liberación de la EDT para que pueda volver a pintar el botón deshabilitado.

En general, se verá algo como esto:

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

podría ser que no habían podido poner su primer fotograma de la EDT también, hacer ver el código, es esto lo que realmente quiere:

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(); 
      } 
     }); 
    } 
} 
Cuestiones relacionadas