2010-06-07 17 views
2

J'essaie d'afficher un message (Connecté) lorsqu'un utilisateur est connecté avec succès mais rien ne se produit lors d'un repaint(). vous pouvez jeter un oeil au code:Rien ne se passe lors de l'actualisation du cadre principal (JAVA)

public class MainFrame extends JFrame implements ActionListener { 

    private static final long serialVersionUID = 1L; 
    private static final int FRAME_HEIGHT = 400; 
    private static final int FRAME_WIDTH = 250; 
    private static final String TITLE = new String("TweeX"); 
    private static String TWITTERID = new String(); 
    private static String TWITTERPW = new String(); 
    private boolean logged = false; 
    private JTextField loginField = new JTextField(10); 
    private JPasswordField passField = new JPasswordField(10); 
    private JButton login = new JButton("Connect"); 
    private GridBagConstraints c = new GridBagConstraints(); 
    private String UserStatus = new String("Please login..."); 

    /* 
    * Constructor ! 
    */ 
    MainFrame() { 

     setSize(FRAME_WIDTH, FRAME_HEIGHT); 
     setTitle(TITLE); 
     setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     setResizable(false); 
     loginUser(); 
    } 

    /* 
    * Login Forms 
    */ 
    protected void loginUser() { 

     this.setLayout(new GridBagLayout()); 

     //add Login Fiels + Label 
     c.fill = GridBagConstraints.HORIZONTAL; 
     c.gridx = 0; 
     c.insets = new Insets(5, 5, 5, 20); 
     c.gridy = 0; 
     add(new JLabel("Username:"), c); 

     c.fill = GridBagConstraints.HORIZONTAL; 
     c.gridx = 1; 
     c.gridy = 0; 
     add(loginField, c); 

     //add Password Fiels + Label 
     c.fill = GridBagConstraints.HORIZONTAL; 
     c.gridx = 0; 
     c.gridy = 1; 
     add(new JLabel("Password:"), c); 

     c.fill = GridBagConstraints.HORIZONTAL; 
     c.gridx = 1; 
     c.gridy = 1; 
     add(passField, c); 

     //add Login button 
     c.fill = GridBagConstraints.HORIZONTAL; 
     c.gridx = 1; 
     c.gridy = 2; 
     add(login, c); 

     //add listener to login button 
     login.addActionListener((ActionListener) this); 
     c.fill = GridBagConstraints.HORIZONTAL; 
     c.gridx = 1; 
     c.gridy = 3; 
     add(new JLabel(UserStatus), c); 
     setVisible(true); 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 

     TWITTERID = loginField.getText(); 
     TWITTERPW = passField.getText(); 
     Twitter twitter = new TwitterFactory() 
       .getInstance(TWITTERID, TWITTERPW); 
     logged = true; 

     try { 
      twitter.verifyCredentials(); 

     } catch (TwitterException e1) { 
      logged = false; 
     } 
    } 

    protected void connect() { 
     if (logged) { 
      UserStatus = "Loged In :)"; 
      repaint(); 
     } 
    } 

    static public void main(String[] argv) { 
     new MainFrame(); 
    } 
} 
+1

il semble que la méthode 'connect' n'ait été appelée nulle part dans votre code ... n'est-ce pas? – ultrajohn

+0

Code reformaté; s'il vous plaît revenir si incorrect. – trashgod

+0

Merci pour la réponse rapide. J'ai résolu le problème avec setText() comme expliqué par trashgod – Ams

Répondre

1

En supposant verifyCredentials() ne bloque pas indéfiniment l'EDT, vous aurez besoin de faire de votre anonyme JLabel un champ et utiliser setText() dans connect(), chaque fois qu'il est appelé. Appeler repaint() devrait être superflu. Par exemple,

private JLabel label = new JLabel("Please login..."); 
... 
protected void loginUser() { 
    ... 
    add(label, c); 
    setVisible(true); 
} 
... 
public void actionPerformed(ActionEvent e) { 
    ... 
    logged = true; 
    connect(); 
} 
... 
protected void connect() { 
    ... 
    label.setText("Loged In: "); 
    ... 
} 
+0

Merci mec qui résoudre le problème! – Ams

+0

+ semble qu'il a oublié de upvote – stacker

+0

@stacker: Merci. @Ams peut avoir besoin de plus de réputation pour cela. Je félicite son code d'exemple et ses commentaires réfléchis. – trashgod