簡體   English   中英

按下空格鍵時打印出文本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM