[英]Printing out text when space bar is pressed
這是我的主程序正在執行的示例。 我想在按下空格鍵時調用一個方法,但是我寫的這個示例僅打印出文本並更改布爾值不起作用。 我不確定自己在做什么導致它無法正常工作。
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
}
}
您需要將keyListener添加到您的組件中,例如按鈕:
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;
}
}
});
目前你正在編寫的代碼inside
一個KeyKistener,這是不綁定到任何組件
因此,這里是修改后的代碼,它將打印鍵事件(我從面板上刪除了按鈕,因此它沒有捕獲空格鍵事件):
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");
}
}
並按JFrame上的空格鍵輸出示例:
Pressed
Typed
Released
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.