(The problem only occurs in Ubuntu. It works very well on Windows. I do not know in other Linux environments)
I used the ComponentListener approach to call the focus in the JTextField in the dialog box, but for this case it just doesnβt work, I donβt know why. It shows focus in the text box and quick button changes. Run and see:
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(); } }); } }
Any idea how to solve this?
- update
Now everything works on EDT. Unfortunately, with the same behavior.
By the way, using the last argument (Object initialValue) of the JOptionPane constructor does not work.
java ubuntu dialog focus
Tom brito
source share