This is an example of what is taking place my main program. I want to call a method when the spacebar is pressed I want to call a method but this example I wrote that just prints out text and changes a boolean value isn't working. I am not sure what I am doing that is causing it not to work.
import java.awt.FlowLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Test implements KeyListener {
static boolean spacedPressed = false;
static JTextField text = new JTextField();
public static void main(String s[]) {
JFrame frame = new JFrame("JFrame Test");
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
JLabel label = new JLabel("Test Label");
JButton button = new JButton();
button.setText("Press me");
panel.add(label);
panel.add(button);
frame.add(panel);
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
if(button.getModel().isPressed()){
System.out.println("pressed");
panel.add(text);
System.out.println(spacedPressed);
}
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_SPACE){
System.out.println("Pressed");
spacedPressed = true;
text.setText("Press worked.");
} else {
System.out.println("not pressed");
text.setText("Press didn't work.");
spacedPressed = false;
}
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
}
You need to add keyListener to you components, eg button:
button.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
System.out.println("Pressed");
spacedPressed = true;
text.setText("Press worked.");
} else {
System.out.println("not pressed");
text.setText("Press didn't work.");
spacedPressed = false;
}
}
});
Currently you are writing code inside
a KeyKistener, which is not binded to any of the components
So here is modified code that will print key events (I removed button from the panel, so it is not catching space key events):
public class Test_1 implements KeyListener {
static boolean spacedPressed = false;
static JTextField text = new JTextField();
public static void main(String s[]) {
JFrame frame = new JFrame("JFrame Test");
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
JLabel label = new JLabel("Test Label");
JButton button = new JButton();
button.setText("Press me");
frame.addKeyListener(new Test_1());
panel.add(label);
// panel.add(button);
frame.add(panel);
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
if (button.getModel().isPressed()) {
System.out.println("pressed");
panel.add(text);
System.out.println(spacedPressed);
}
}
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
System.out.println("Pressed");
spacedPressed = true;
text.setText("Press worked.");
} else {
System.out.println("not pressed");
text.setText("Press didn't work.");
spacedPressed = false;
}
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("Released");
}
@Override
public void keyTyped(KeyEvent e) {
System.out.println("Typed");
}
}
And sample output on pressing space key on JFrame:
Pressed
Typed
Released
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.