2012-02-13 19 views
5

現在、Java Jframeに小さな問題があり、更新していないボタンがあります。Java JFrameがボタンの設定を更新していません

私はそれが開く新しいJFrameのの印刷が行われたJFrameが閉じていることをされるまで...

ボタンが場合にのみ、無効になりますと、新しいウィンドウが発生したときにしますが、印刷ボタンを無効にしようとしています

私は上記の混合物は、彼らとしてだけでなく、mainPanel.revalidate(); mainPanel.repaint(); PrintBttn.revalidate(); PrintBttn.repaintを呼び出して試してみましたPrintBttn.setEnabled(false);

:少し時間を取ることができ、それまで....

私はこれを行うことによって無効にする]ボタンを設定していません他のフォーラムでお勧めします...

私は最初にこれを無効にしてから、新しいウィンドウが表示されるまで、これを無効にしていないのはなぜですか? ..

おかげで、 エリック

+1

Java命名規則を学び、それらに固執してください – kleopatra

答えて

6

ほとんどの場合、それは無効なボタンを再描画できるようにするためにEDTを解除する質問です。

一般的には、以下のようになります。

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

あなたは、コードを見てください、あまりにもEDTであなたの最初のフレームを置くことができなかった場合がございます、これはあなたが実際に何をしたいです:

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(); 
      } 
     }); 
    } 
} 
関連する問題