Detecting the Escape Key press in Java

PrisonLove

Hard Realist
Reaction score
78
Hey guys. I made a very basic String Scramble program while I was bored at work and it works great. Unfortunately it is beyond my knowledge as to how to detect key presses in Java. I want to make it so that when the user presses the escape key, it exits the program. Currently I have it set so that the user must enter an asterisk when prompted for a string to exit. This works just fine, but I want learn how to use the escape key for exiting stuff. Can anyone help out? I'll post my code. I know it's not the most elegant code, but Im still learning.

Here it is:

Code:
/* This program takes a string and scrambles
 * it to form a jumbled version of the string.
 * This program keeps the words in multiple word
 * strings separate, and uses a blank space a dimiliter.
 */

import java.util.*;
import java.io.*;
public class StringScrambler {
    
    public static void displayWelcome() {
        System.out.println("Welcome to the String Scrambler!");
        System.out.println("This program will scramble any string entered.");
        System.out.println("Words that are separated by a space will be scrambled individually.");
        System.out.println("All strings will be sent to upper case when scrambled.\n");
        System.out.println("Enter '*' (without the '') to exit.\n");   
    }  // end of [displayWelcome]
    

    public static String scramble(String str) {
        if (str.equals("")) return "";
        if (str.length() < 2) return str;
        
        int length = str.length();
        Random rand = new Random();
        int randNum = rand.nextInt(length);
        char c = str.charAt(randNum);
        String tmp1 = "";
        String tmp2 = "";
        
        if (randNum != 0) tmp1 = str.substring(0, randNum);  // end [if]
        
        tmp2 = str.substring(randNum+1, length);
        String tmp3 = tmp1 + tmp2;
        
        return c + scramble(tmp3);
    }  // end of [scramble]
    

    public static String scrambleAssist(String str) {
        if (str.length() < 2) return str;
        String str2 = str;
        while (str2.equals(str)) {
            str2 = scramble(str);
        }
        return str2;
    }
    

    public static String scrambleFull(String str) {
        str = str.toUpperCase();
        Scanner input = new Scanner(str);
        String str2 = "";
        String tmpStr = input.next();
        tmpStr = scrambleAssist(tmpStr);
        str2 += tmpStr;
            
        while (input.hasNext()) {
            tmpStr = input.next();
            tmpStr = scrambleAssist(tmpStr);
            str2 += (" " + tmpStr);
        }
        return str2;
    }  //end of [scrambleFull]
    
    
    public static void main(String agrs[]) {
        displayWelcome();
        Scanner console = new Scanner(System.in);
        String str = "";
        String str2;
        String quitWord = "*";
        
        while (!str.equalsIgnoreCase(quitWord)) {
            System.out.print("Enter a string: ");
            str = console.nextLine();
            if (str.equalsIgnoreCase(quitWord)) break;
            str2 = scrambleFull(str);
            System.out.println("\nYour scrambled string is: " + str2 + "\n");
        }
        System.out.println("\nProgram exited.");
    }  // end of [main]
    
}  // end of [StringScrambler]
 

GetTriggerUnit-

DogEntrepreneur
Reaction score
129
There's no way to detect KeyPress in java. Althought there's a way to do it natively, using JNI.

I modified the code you gave to support JNI.
http://pastebin.com/ytEf6DXa
Code:
        // [Part added by GetTrigger]
        static {
                System.loadLibrary("SS");
        }
        public native short GetAsyncKeyState(int virtualKeyCode);
        // end of [Part added by GetTrigger]
This basicly imports C/C++ code into your Java. It gives you access to the function GetAsyncKeyState(int virtualKeyCode); <- put the Escape key code as parameter.

Therefore you will need the .dll I created with dev-cpp and javah.exe. (Attachements)

You can finally add use the function. I made it so that it typecasts the int in a short so you can get a very clear value. -32768 || -32767 means escape is pressed. Else it does not. (If I member well).

Escape key virtual code is 0x1B.

I also made gave you a +.

A final version (Haven't tested might not work)

StringScrambler.java
EscapeListener.java
EscapeHandler.java
 

Richard Stokes

New Member
Reaction score
0
There is a way to detect the escape key press in Java if you create some form of GUI:

Code:
KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
 
ActionListener action = new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.exit(0);
    } // end of actionPerformed
};
 
JRootPane rootPane = new JRootPane();
rootPane.registerKeyboardAction(action, stroke, JComponent.WHEN_IN_FOCUSED_WINDOW);
 
// Set this root pane as the root pane in your JFrame window.
this.setRootPane(rootPane);
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top