2012-11-08 2 views
0

작동하지 않음 receiveCommand() 메소드.스윙 invokeLater() 메소드 나는이 방법을 가지고 내 주요 스윙 프레임에서

그러나 작동하지 않습니다. 즉, button1은 계속 사용할 수 없습니다. 여기서 내가 뭘 잘못 했니?

편집 : 여기 는 단추 1의 선언입니다 :

private javax.swing.JButton button1; 
button1.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N 
button1.setEnabled(false); 
button1.addActionListener(new java.awt.event.ActionListener() { 
public void actionPerformed(java.awt.event.ActionEvent evt) { 
      button1ActionPerformed(evt); 
     } 
    }); 

button1을receiveCommand 방법입니다이 게임 클래스 :

public class Game extends javax.swing.JFrame 

m ethod가 다른 클래스에서 호출됩니다

gameUI.receiveCommand("enable"); //gameUI is a Game object 

편집 2 : 모든 당신의 도움을 주셔서 감사합니다! 결국 잘못된 참조로 판명 되었기 때문에 아직 설정되지 않은 잘못된 프레임의 GUI를 업데이트하려고했습니다. 어리석은 나의

+3

"작동하지 않음"은 조금 알려줍니다. 당신은 정교 할 수 있습니까? 우리에게 더 많은 정보를 주시겠습니까? –

+0

'if' 문 안의 코드 블록이 실행되고 있습니까? 어쩌면'command.equalsIgnoreCase ("enable")'를 대신 사용해 보시겠습니까? – MadProgrammer

+0

나는 깜박하기를 바란다 : button1은 여전히 ​​비활성화되어있다. – Chin

답변

1

어쨌든, 이것은 작동한다.

public class TestInvokeLater { 

    public static void main(String[] args) { 
     new TestInvokeLater(); 
    } 

    public TestInvokeLater() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException ex) { 
       } catch (InstantiationException ex) { 
       } catch (IllegalAccessException ex) { 
       } catch (UnsupportedLookAndFeelException ex) { 
       } 

       JFrame frame = new JFrame(); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      setBorder(new EmptyBorder(12, 12, 12, 12)); 
      final JButton runMe = new JButton("Run me"); 
      runMe.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        runMe.setEnabled(false); 
        new Thread(new Runnable() { 

         @Override 
         public void run() { 
          try { 
           Thread.sleep(1000); 
          } catch (InterruptedException ex) { 
          } 
          SwingUtilities.invokeLater(new Runnable() { 

           @Override 
           public void run() { 
            runMe.setEnabled(true); 
           } 
          }); 
         } 
        }).start(); 
       } 
      }); 
      setLayout(new GridBagLayout()); 
      add(runMe); 
     } 
    } 
} 
+1

왜 * 무효화하고 컨테이너를 다시 그려 보시기 바랍니다 * 조언? 이러한 메소드를 호출 할 필요는 없습니다. – Robin

+1

@Robin 나는 동의하지만, 이것을 수행함으로써 해결해야하는 많은 상황을 보았습니다. – MadProgrammer

+0

일지도 모릅니다. 그러나 당신의 예는 이상한 사례가 아니기 때문에 ... 미경험자를 잘못된 방향으로 이끌 수있는 혼란 – kleopatra