Java GUI: Comment mettre l'accent sur JButton dans JPanel sur JFrame?
J'ai expérimenté et cherché et je n'arrive pas à comprendre ce que je pensait que ce serait quelque chose de simple, qui est d'avoir mon bouton a le focus lorsque mon petit GUI app se lance I. e., donc, tout ce que l'utilisateur a à faire est d'appuyer sur leur touche Entrée/Retour, qui aura le même effet que si elles avaient cliqué sur le bouton DÉMARRER, avec leur souris. Voici mon code. Merci pour votre aide 🙂
private void initialize() {
//Launch the frame:
frame = new JFrame();
frame.setTitle("Welcome!");
frame.setSize(520, 480);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Add the image:
ImageIcon heroShotImage = new ImageIcon("heroShot.jpg");
JPanel heroShotPanel = new JPanel();
JLabel heroShot = new JLabel(heroShotImage);
heroShotPanel.add(heroShot);
//Create a panel to hold the "Start" button:
JPanel submitPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
//Create the "Start" button, which launches business logic and dialogs:
JButton start = new JButton("Start");
start.setToolTipText("Click to use library");
start.setFocusable(true); //How do I get focus on button on App launch?
start.requestFocus(true); //Tried a few things and can't get it to work.
//Listen for user actions and do some basic validation:
start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//THE APP's LOGIC GOES HERE...
}
//Finish setting up the GUI and its components, listeners, and actions:
submitPanel.add(start);
frame.getContentPane().add(heroShotPanel, BorderLayout.NORTH);
frame.getContentPane().add(submitPanel, BorderLayout.SOUTH);
}
source d'informationauteur chrisco
Vous devez vous connecter pour publier un commentaire.
Essayer ce code.. Tout ce que j'ai fait est de déplacer la
requestFocus()
méthode à la fin.Fondamentalement, ce sont les deux choses que vous avez à faire pour répondre tout en appuyant sur la touche enter et pour qu'il soit centré par défaut.
Si je suis la compréhension de vous, alors vous voulez faire un événement click du Bouton de Démarrage lorsque l'utilisateur appuie sur la touche Enter. Si c'est le cas, alors vous pouvez le faire comme suit:
Et si vous voulez juste pour se concentrer sur le Bouton démarrer puis déplacez votre
requestFocus()
méthode à la fin (après vous faites votre image visible) et pas besoin de passertrue
. Aussi il est préférable d'utiliserrequestFocusInWindow()
puisrequestFocus()
comme indiqué dans la java doc.Si vous voulez que votre
start
bouton pour obtenir le focus alors le faire à la findéplacer votre foyer ligne à la fin de la méthode
et de le modifier pour
pas tâche facile, car Focus/Focus_SubSystem est venu à partir des OS et est assez asynchrone,
1) à l'intérieur de l'un des Récipients œuvres par wraping que dans invokeLater(),
2) gérer le Focus entre deux ou plusieurs Haut-Niveau Conteneurspar @camickr