2010-06-07 45 views
2

时没有任何事情我试图显示一个(登录)消息时,用户成功连接但没有发生时做一个repaint()。你可以去看一下代码:当刷新主框架(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

看来,方法'连接'没有被调用在你的代码中的任何地方......是不是? – ultrajohn 2010-06-07 04:12:38

+0

重新格式化的代码;如果不正确请回复。 – trashgod 2010-06-07 04:28:37

+0

感谢您的快速回答。我解决了setText()的问题,正如垃圾桶 – Ams 2010-06-07 04:46:48

回答

1

假设verifyCredentials()不会阻止EDT无限,你需要让你的匿名JLabel场和connect()使用setText(),每当它被调用。调用repaint()应该是多余的。例如,

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

所解释的那样。谢谢你的家伙解决了问题! – Ams 2010-06-07 04:41:01

+0

+他似乎忘记了upvote – stacker 2010-06-08 04:52:11

+0

@stacker:谢谢。 @Ams可能需要更多的声誉。我赞扬他的示例代码和深思熟虑的评论。 – trashgod 2010-06-08 05:21:52