KeyListener ohne Focus - Wie?

Schrubber

Bekanntes Mitglied
Hallo,

ich schreibe derzeit an einem kleinen Hilfstool für ein Online-Spiel. Hierzu benötige ich die Möglichkeit, aus dem Spiel heraus über den KeyListener meines Programmes 6 verschiedene Tasten zu identifizieren und Aktionen auf die Betätigung auszuführen.

Das Programm funktioniert komplett, wenn das Fenster den Focus hat. Jedoch möchte ich nicht, dass ich jedesmal, wenn ich die Taste drücken will, auf den Desktop muss. Denn das kann in gefährlichen Situtationen Ingame zu einer Niederlage führen...

Vielleicht kann mir da jemand helfen? :) Wäre echt nett.

Hier mein Code:

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.Timer;
import java.util.TimerTask;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
 
public class LoL_Timer implements MouseListener, MouseMotionListener, KeyListener {
	private JLabel baronPic, baronLabel, dragonPic, dragonLabel, lizardPic, lizardLabel, golemPic, golemLabel;
	private BufferedImage baronNashor, dragon, lizard, golem;
	private int X,Y;
	private int delay = 0;
	private int period = 1000;
	private Timer timer = new Timer();
	private JDialog dialog;
	private int baronTime = 420;
	private int dragonTime = 360;
	private int lizardTime = 300;
	private int golemTime = 300;
	private int baronCounter, dragonCounter, lizardCounter, golemCounter;
	
	public static void main(String[] args) {
		new LoL_Timer();
	}
	
	public LoL_Timer() {
		try {
			baronNashor = ImageIO.read(new File("C:\\Users\\Schrubber\\Desktop\\LoL_Timer\\images\\Baron_Nashor.png"));
			dragon = ImageIO.read(new File("C:\\Users\\Schrubber\\Desktop\\LoL_Timer\\images\\Dragon.png"));
			lizard = ImageIO.read(new File("C:\\Users\\Schrubber\\Desktop\\LoL_Timer\\images\\Lizard.png"));
			golem = ImageIO.read(new File("C:\\Users\\Schrubber\\Desktop\\LoL_Timer\\images\\Golem.png"));
			
			baronPic = new JLabel(new ImageIcon( baronNashor ));
			dragonPic = new JLabel(new ImageIcon( dragon ));
			lizardPic = new JLabel(new ImageIcon( lizard ));
			golemPic = new JLabel(new ImageIcon( golem ));
			
			/* Images, wenn das Progamm als .jar ausgeführt werden soll */
			//baronNashor = ImageIO.read(new File("images/Baron_Nashor.png"));
			//dragon = ImageIO.read(new File("images/Dragon.png"));
			//lizard = ImageIO.read(new File("images/Lizard.png"));
			//golem = ImageIO.read(new File("images/Golem.png"));
			
		} catch (IOException e) {
			e.printStackTrace();
		}
		dialog = new JDialog();
		baronLabel = new JLabel("Not started yet");
		dragonLabel = new JLabel("Not started yet");
		lizardLabel = new JLabel("Not started yet");
		golemLabel = new JLabel("Not started yet");
		JPanel panel1 = new JPanel();
		panel1.add(baronPic);
		panel1.add(baronLabel);
		panel1.add(dragonPic);
		panel1.add(dragonLabel);
		panel1.add(lizardPic);
		panel1.add(lizardLabel);
		panel1.add(golemPic);
		panel1.add(golemLabel);
		panel1.setVisible(true);		
		panel1.setOpaque(false);		
		dialog.add(panel1);
		dialog.setUndecorated(true);
		dialog.setSize(new Dimension(128,600));
		dialog.setFocusable(true);
		dialog.setFocusableWindowState(true);
		dialog.setVisible(true);
		dialog.setLayout(null);
		dialog.addMouseListener(this);
		dialog.addMouseMotionListener(this);
		dialog.addKeyListener(this);
		dialog.setBackground(new Color(0,0,0,0));
		dialog.setLocation(0,-4);
		dialog.setAlwaysOnTop(true);
		
		timer.scheduleAtFixedRate(new TimerTask() {
	        public void run() {
	            if(baronCounter > 0) baronCounter --;
	            if(dragonCounter > 0) dragonCounter --;
	            if(lizardCounter > 0) lizardCounter --;
	            if(golemCounter > 0) golemCounter --;
	            setTextAll();
	        }
	    }, delay, period);
		
	}
	
	private void setTextAll() {
		baronLabel.setText(formatTime(baronCounter+""));
		dragonLabel.setText(formatTime(dragonCounter+""));
		lizardLabel.setText(formatTime(lizardCounter+""));
		golemLabel.setText(formatTime(golemCounter+""));
    }
    
    private String formatTime(String input2) {
    	int input = Integer.parseInt(input2);

    	double scale3600 = 1.0/3600;
    	double scale60 = 1.0/60;
    	int hh = (int) (input * scale3600);
    	int mm = (int) (input * scale60);
    	int ss = input - mm*60 - hh*3600;

    	DecimalFormat format = new DecimalFormat("00");
    	
    	return format.format(mm) + ":" + format.format(ss);
    }
    
    @Override
	public void mouseDragged(MouseEvent arg0) {
		dialog.setLocation(dialog.getLocation().x+(arg0.getX()-X), dialog.getLocation().y+(arg0.getY()-Y));
	}

	@Override
	public void mouseMoved(MouseEvent arg0) {
	}

	@Override
	public void mouseClicked(MouseEvent e) {
	}

	@Override
	public void mouseEntered(MouseEvent e) {
	}

	@Override
	public void mouseExited(MouseEvent e) {
	}

	@Override
	public void mousePressed(MouseEvent e) {
        X=e.getX();
        Y=e.getY();
	}

	@Override
	public void mouseReleased(MouseEvent e) {
	}

	@Override
	public void keyPressed(KeyEvent arg0) {		
		switch (arg0.getKeyCode()) {
		case 27:
			System.exit(1);
			break;
		case 97:
			baronCounter = baronTime;
			break;
		case 98:
			dragonCounter = dragonTime;
			break;
		case 99:
			lizardCounter = lizardTime;
			break;
		case 100:
			golemCounter = golemTime;
			break;
		case 101:
			System.out.println("Unbelegt - Numpad5");
			break;
		case 102:
			System.out.println("Unbelegt - Numpad6");
			break;
		}		
	}

	@Override
	public void keyReleased(KeyEvent e) {
	}

	@Override
	public void keyTyped(KeyEvent e) {	
	}

}
 
S

Spacerat

Gast
@Marco13: Möglich ist das mit Boardmitteln zumindest in GUI-Applikationen schon, aber unheimlich umständlich. Der steinige Weg führt über einen FocusListener, der jeder Component angehängt werden muss.
Java:
public class GlobalInputListener implements FocusListener {
  private KeyListener kl = new KeyAdapter() {
    // override desired methods
  }

  private MouseAdapter ml = new MouseAdapter() {
    // override desired methods
  }

  public void focusGained(FocusEvent e) {
    Component c = e.getOppositeComponent();
    c.removeKeyListener(kl);
    c.removeMouseMotionListener(ml):
    c.removeMouseWheelListener(ml):
    c.removeMouseListener(ml):
  }

  public void focusLost(FocusEvent e) {
    Component c = e.getOppositeComponent();
    c.addKeyListener(kl);
    c.addMouseMotionListener(ml):
    c.addMouseWheelListener(ml):
    c.addMouseListener(ml):
  }
}
[EDIT]:oops: Okay, wer lesen kann ist klar im Vorteil... Für das Vorhaben des TO reicht das natürlich nicht.[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Keylistener ohne Dazugehörige Gui Allgemeine Java-Themen 6
E KeyListener ohne GUI Allgemeine Java-Themen 6
P Tastatur abfrage ohne KeyListener Allgemeine Java-Themen 3
K KeyListener-Alternative ohne anfängliches Delay ? Allgemeine Java-Themen 5
R KeyListener ohne Frame und Applet Allgemeine Java-Themen 7
S KeyListener ohne awt Allgemeine Java-Themen 2
G KeyListener für JTextField Allgemeine Java-Themen 5
VfL_Freak KeyEvent.VK_TAB im KeyListener abfragen Allgemeine Java-Themen 13
R Java KeyListener buggt? Allgemeine Java-Themen 1
C KeyListener Frage Allgemeine Java-Themen 3
T KeyListener Allgemeine Java-Themen 1
C KeyListener auslagern - Wie? Allgemeine Java-Themen 3
B Keylistener geht nicht Allgemeine Java-Themen 9
A keylistener funktionirt nicht Allgemeine Java-Themen 4
G JTable mit Keylistener geht nicht Allgemeine Java-Themen 3
M KeyListener Allgemeine Java-Themen 8
S C++/C KeyListener zusammen mit Java Programm Allgemeine Java-Themen 4
T KeyListener lässt sich nur einmal drücken Allgemeine Java-Themen 2
B MouseListener und KeyListener Allgemeine Java-Themen 15
C Sudoku und KeyListener Allgemeine Java-Themen 2
O Frage zum KEyListener Allgemeine Java-Themen 3
J keylistener auf jtable Allgemeine Java-Themen 19
ARadauer mit keylistener hören auch wenn frame nicht den focus hat Allgemeine Java-Themen 2
U Frage zum KeyListener Allgemeine Java-Themen 7
B KeyListener auf mehrere TextFields anwenden Allgemeine Java-Themen 5
G KeyListener: Wiederholtes Aufrufen von KeyPressed verhindern Allgemeine Java-Themen 3
M Tab und KeyListener in einer JTextArea Allgemeine Java-Themen 7
D Allgemeiner KeyListener Allgemeine Java-Themen 4
G KeyListener auf ALT + S Allgemeine Java-Themen 5
S KeyListener! Image Problem! Allgemeine Java-Themen 2
7 Keylistener Allgemeine Java-Themen 3
TheJavaKid Focus für KeyListener setzen Allgemeine Java-Themen 5
M Keylistener für sondertasten an Tastaturen? Allgemeine Java-Themen 6
S Keylistener funktioniert nicht(setFocusable) Allgemeine Java-Themen 4
R Global KeyListener/MouseListener Allgemeine Java-Themen 4
T Unterschiede beim KeyListener zwischen NT und XP Allgemeine Java-Themen 6
F KeyListener für JTextField Allgemeine Java-Themen 4
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
O Maven ein externes jar laden ohne die Applikation neu zu kompilieren Allgemeine Java-Themen 4
Mike80 Processing Programm fiert ohne Arduino ein Allgemeine Java-Themen 2
T Datum OHNE Uhrzeit Zeitzonen-übergreifend Allgemeine Java-Themen 4
N mit sysout, ohne sysout Allgemeine Java-Themen 17
O Programmierprüfung auf moodle ohne Hilfsmittel... Allgemeine Java-Themen 23
Mozart53 JLabel nur meinen Text verschieben ohne Image Allgemeine Java-Themen 3
M Switches ohne String Allgemeine Java-Themen 18
A Java JDK ohne Oracle Konto Allgemeine Java-Themen 5
H Matrix ohne Array erstellen Allgemeine Java-Themen 9
N E-Mail Validator (ohne Regex!) Allgemeine Java-Themen 7
A Java ListNode Element einfügen ohne Bibliothek Allgemeine Java-Themen 6
G Datei aus Ordner wählen, ohne den Dateinamen im Pfad angeben zu müssen Allgemeine Java-Themen 4
Thallius Zeitzone zu einem LocalDate hinzufügen aber ohne es zu ändern... Allgemeine Java-Themen 2
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
X Adjazenzliste ohne ArrayList Allgemeine Java-Themen 6
P Input/Output entfernte Datei mit Java öffnen ohne Download Allgemeine Java-Themen 5
Kirby.exe Keyboard Input ohne Enter Allgemeine Java-Themen 43
T Abgeleitetes Interface public ohne Schlüsselwort "interface"? Allgemeine Java-Themen 3
S Potenzieren mit rationalen Potenzen ohne Math.pow Allgemeine Java-Themen 16
F Timestamp in Oracle ohne Formatierung reinbekommen Allgemeine Java-Themen 7
M Drucken ohne Dialog Allgemeine Java-Themen 1
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
J .java-Dateitext Compile zur Laufzeit ohne File Allgemeine Java-Themen 15
O Zugriff auf mySQL ohne JDBC Allgemeine Java-Themen 3
S Input/Output Jave.utill.logging ohne Default-Locale also in Englisch Allgemeine Java-Themen 3
J ftp - delete file ohne appache Allgemeine Java-Themen 8
H float Berechnung: Ergebnis ohne wissenschaftliche Notation Allgemeine Java-Themen 5
offi Excel mit Inhalten aus DB öffnen ohne zu speichern Allgemeine Java-Themen 8
E String in Zahl umwandeln, ohne Befehl Integer.parseInt Allgemeine Java-Themen 3
S Java Plugin System (ohne OSGI) Allgemeine Java-Themen 10
G Array ohne Aufzählungszeichen ausgeben Allgemeine Java-Themen 6
Aruetiise Swing JOptionPane ohne denn Thread zu pausieren Allgemeine Java-Themen 1
RalleYTN Audiolänge einer MP3 Datei erhalten ohne diese vollständig zu laden Allgemeine Java-Themen 15
RalleYTN 2D-Grafik Bild ohne AWT, Swing und JavaFX rotieren Allgemeine Java-Themen 12
A BufferedReader ohne System.in Allgemeine Java-Themen 9
E Programm ohne Windowsrand(Vollbild) ? Allgemeine Java-Themen 5
B Applikation ohne (direkt)Java installiert zu haben auszuführen Allgemeine Java-Themen 8
RalleYTN Datentypen Herausfinden ob Object ein Array ist ohne den Typen des Arrays zu kennen? Allgemeine Java-Themen 12
OnDemand JavaMail ohne Anhang senden Allgemeine Java-Themen 4
N String ins Clipboard kopieren ohne makieren. Allgemeine Java-Themen 12
T Ziffernsumme ohne String Operatoren Allgemeine Java-Themen 4
E Threads Ausführung in Threads ist langsamer als ohne Threads Allgemeine Java-Themen 13
R NullPointerException Ohne Grund Allgemeine Java-Themen 5
RalleYTN JPEG mit CMYK(ohne JAI oder TwelveMonkeys!) Allgemeine Java-Themen 0
P Zwei ArrayLists: Ohne die eine überhaupt anzurühren, wird sie verändert Allgemeine Java-Themen 2
HarleyDavidson Input/Output Heruntergeladene Datei direkt nach dem Download öffnen ohne zu speichern Allgemeine Java-Themen 1
Y String to Double ohne ParseDouble Allgemeine Java-Themen 11
S Methoden ohne Methodenkopf ?! Allgemeine Java-Themen 5
L Daten ohne Datenbank richtig abspeichern Allgemeine Java-Themen 5
A Linux: Native Library mit Rootrechten ohne Prozess mit sudo zu starten Allgemeine Java-Themen 1
T Threads Input/Output im Thread - Datei ohne Inhalt Allgemeine Java-Themen 1
A Konstrukt ohne Main für Xml-Parser Allgemeine Java-Themen 1
S Performante Visualisierung groẞer Datenmengen (ohne JFreeChart) Allgemeine Java-Themen 22
M Permutation ohne Wiederholung mit rekursion Allgemeine Java-Themen 4
C HtmlUnit Daten einer Tabelle bekommen ohne, dass diese eine ID aufweist Allgemeine Java-Themen 1
F File.listFiles ohne .sort Allgemeine Java-Themen 6
H Unicode ausgeben ohne Umwandlung - geht das? Allgemeine Java-Themen 3
L iText PDF-Generierung ohne Speichern Allgemeine Java-Themen 10
R Wie schaffe ich es, dass java zB 100 zählt ohne ständig "else if" hinschreiben zu müssen? Allgemeine Java-Themen 7
T Zwei Wortendungen vergleichen ohne .equals Allgemeine Java-Themen 10
J Array ohne vorher festgelegte Länge oder Wie wandle ich Zahlen in Zahlen mit anderen Basen um? Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben