简体   繁体   中英

Printing out text when space bar is pressed

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM