(問題出現在Ubuntu只在Windows工作正常。我不Linux等其他環境都知道)問題集中的JTextField
我已經使用了的ComponentListener的方法在對話中呼籲焦點JTextField中,但對於這種情況只是不工作,我不知道爲什麼。它顯示文本字段中的焦點並快速切換到按鈕。運行並看:
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class User {
private String username = "";
private String password = "";
public User() {
// default constructor
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
/** Create a panel containing the componet and tha label. */
public JPanel createLabeledComponent(JLabel label, Component comp) {
GridLayout layout = new GridLayout(2, 1);
JPanel panel = new JPanel(layout);
panel.add(label);
panel.add(comp);
label.setLabelFor(comp);
return panel;
}
public void showEditDialog() {
JLabel usernameLbl = new JLabel(username);
final JTextField usernameField = new JTextField();
usernameField.setText(username);
JPanel usernamePnl = createLabeledComponent(usernameLbl, usernameField);
JLabel passwordLbl = new JLabel(password);
JPasswordField passwordField = new JPasswordField(password);
JPanel passwordPnl = createLabeledComponent(passwordLbl, passwordField);
Object[] fields = { "User:", usernamePnl, "Password:", passwordPnl };
JOptionPane optionPane = new JOptionPane(fields, JOptionPane.PLAIN_MESSAGE,
JOptionPane.OK_CANCEL_OPTION, null, null);
JDialog dialog = optionPane.createDialog("User Data");
dialog.addComponentListener(new ComponentAdapter() {
@Override
public void componentShown(ComponentEvent e) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
usernameField.requestFocusInWindow();
}
});
}
});
dialog.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new User().showEditDialog();
}
});
}
}
任何想法如何解決這個問題?
--update
現在一切都在美國東部時間運行。可悲的是,同樣的行爲。
順便說一句,使用JOptionPane構造函數的最後一個參數(Object initialValue)不起作用。
感謝發佈代碼+1, createDialog(字符串)方法沒有找到:-) – 2010-04-13 20:14:09
@ringbearer,javadocs注意該方法是'自1.6',我猜你正在使用JRE比那更老? :) – 2010-04-13 20:16:25
對。我在RHEL上使用JDK 1.5。 但是,我最好的選擇是JOPtionPane有一個內部的FocusManager,導致Tom的設置被覆蓋。 JOptionPane可能不是用這種行爲啓動對話框的好方法。 – 2010-04-13 21:30:22