J'ai créé une jframe et j'ai ajouté un bouton qui, après avoir été cliqué, vous demande d'appuyer sur n'importe quel bouton, qui s'affiche également sur le bouton.
(ses affichages devraient aller comme ceci -> "Click Me" -> "Pressez n'importe quel bouton" -> "barre d'espace")
Mon problème n ° 1 est que, je ne veux pas aller de "Click Me" à "Appuyez sur n'importe quel bouton" en appuyant sur la barre d'espace.
Et mon problème n ° 2 est que, quand je suis à "Press Any Button" et j'appuie sur la barre d'espace, à la libération, il revient à "Press Any Button" au lieu de rester à "Space Bar".
Voici mon code.Comment empêcher la barre d'espace de déclencher l'effet de clic sur un bouton?
public class Test {
/**
* @param args the command line arguments
*/
static class starton implements ActionListener {
private JButton button;
private JFrame frame;
public starton(JButton button, JFrame frame) {
this.button = button;
this.frame = frame;
}
public void actionPerformed(ActionEvent e) {
button.setText("Press A Button");
button.setSize(button.getPreferredSize());
button.addKeyListener(
new KeyListener() {
@Override
public void keyPressed(KeyEvent e){
String text = null;
char a = e.getKeyChar();
text = ""+a+"";
if (a == ' '){
text = "Space Bar";
}
button.setText(""+text+"");
button.setSize(button.getPreferredSize());
button.removeKeyListener(this);
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent ke) {
}
});
}
}
public static void main(String[] args) throws IOException {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
double width = screenSize.getWidth();
double height = screenSize.getHeight();
int frame1w = 600;
int frame1h = 400;
JFrame frame1 = new JFrame("Foo");
frame1.setSize(frame1w, frame1h);
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane = new JPanel();
contentPane.setBackground(Color.WHITE);
contentPane.setLayout(null);
frame1.setContentPane(contentPane);
JButton button1 = new JButton("Click Me");
button1.setSize(button1.getPreferredSize());
button1.addActionListener(new starton(button1, frame1));
// add more code here
contentPane.add(button1);
frame1.setVisible(true);
}
}
sur le Premier1, pourquoi je veux désactiver le "pressé" pour la barre d'espace? n'est-ce pas censé être le point entier? je veux dire appuyer sur la barre d'espace? aussi je n'ai pas multiplue les boutons, c'est juste 1 .. aussi sur le deuxième problème, j'ai essayé d'enlever avec succès l'écouteur d'action mais je veux pouvoir faire la routine autant de fois que je veux, pas juste une fois –
a pris votre question entière comme * "Comment arrêter la barre d'espace de déclencher l'effet de clic sur un bouton? *" et * "je ne veux pas passer de" Click Me "à" Appuyez sur n'importe quel bouton "en appuyant sur la barre d'espace. vous vouliez désactiver la fonctionnalité de la barre [Espace] pour le bouton. * "aussi je n'ai pas de boutons multiples, c'est juste 1" * - Oui, et c'est vous le problème "de base"; – MadProgrammer
* "J'ai essayé de retirer avec succès l'écouteur d'action mais je veux être capable de faire la routine autant de fois que je le veux, pas seulement une fois" * Et? Encore une fois, deux boutons aideraient à résoudre la plupart des problèmes que vous rencontrez. Vous pouvez simplement les échanger en place comme vous le souhaitez. Parce que vous avez à la fois un 'KeyListener' et un' ActionListener' enregistrés sur le bouton, chaque fois que vous appuyez sur [Espace], ils seront tous deux déclenchés, à mon avis, vous demandez simplement des problèmes qui seront plus faciles à résoudre en utilisant deux (ou plus) boutons, chacun avec leurs propres fonctionnalités ciblées – MadProgrammer