刷新主框架(JAVA)时没有任何反应

时间:2010-06-07 04:06:48

标签: java twitter jframe frame actionlistener

我尝试在用户成功连接时显示(登录)消息但在执行paint()时没有任何反应。你可以看看代码:

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 个答案:

答案 0 :(得分:1)

假设verifyCredentials()无法无限期阻止EDT,则无论何时调用,您都需要在匿名JLabel字段中使用setText() connect() 。致电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: ");
    ...
}