我尝试在用户成功连接时显示(登录)消息但在执行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();
}
}
答案 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: ");
...
}