2012-02-13 18 views
5

Şu anda Java Jframe ile küçük bir sorun yaşıyorum ve bir düğme güncellenmiyor.Java JFrame bir düğmenin ayarlarını güncelleştirmiyor

Ben yapılır açılır ve JFrame kapalı olduğunu yeni JFrame baskı kadar Baskı Düğme devre dışı bırakmak için çalışıyorum ...

düğmesi yalnızca yeni bir pencere oluşur ve ne zaman eğer devre dışı, ama şunu yapacaktır PrintBttn.setEnabled(false);

Ben mainPanel.revalidate(); mainPanel.repaint(); PrintBttn.revalidate(); PrintBttn.repaint yanı sıra yukarıda karışımı onlar gibi arama denedi: o zamana kadar,

Bunu yaparak devre dışı bırakmak için düğmeye set .... zaman biraz alabilir diğer forumlarda tavsiye edilir ...

Şu an bu noktada bir kayıpım ve neden ilk yaptığım şeyden bu yana yeni bir pencere görüntülenene kadar düğmeyi devre dışı bırakmamaktır. Yukarıda gösterildiği gibi devre dışı bırakın ve sonra yeni pencereyi oluşturun .. ..

sayesinde Erik

+1

java adlandırma kurallarını öğrenmek ve onlara sopa – kleopatra

cevap

6

Büyük olasılıkla, devre dışı düğmesini yeniden boyamak için izin EDT bırakmadan bir soru.

Genel olarak, bu gibi bir şey olacaktır:

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

sen, kod izlemek yapmak çok EDT içinde ilk kareyi koymak başarısız olmuştu Might be bu aslında istediğim şey:

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