Frage

Ich versuche, eine (protokollierte) Nachricht zu zeigen, wenn ein Benutzer erfolgreich verbunden ist, aber nichts passiert, wenn ein Repaint () macht. Sie können einen Blick auf den Code werfen:

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();
    }
}
War es hilfreich?

Lösung

Annahme verifyCredentials() Blockiert die EDT nicht auf unbestimmte Zeit, Sie müssen Ihr Anonymous machen JLabel ein Feld und verwenden setText() in connect(), wann immer es angerufen wird. Berufung repaint() sollte überflüssig sein. Zum Beispiel,

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: ");
    ...
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top