Robot --> Keyevent --> ö, ä, ü, -

Status
Nicht offen für weitere Antworten.

poffi

Mitglied
Hallo zusammen

Ich programmiere gerade mit der Robot-Klasse. Mein Ziel ist es einen Text automatisch in den Notepad einzugeben.
Den Text wandle ich in ein char-Array und gebe dann die Buchstaben mit robot.keyPress(array); ein. Nun treffe ich auf einige Problem bei den Zeichen ä, ö, ü und dem Bindestrick (-). Diese Zeichen werden nämlich nicht getippt. Darum fange ich die Ausnahmen mit einem switch ab und will sie nun richtig ausgeben.

Wer kann mir weiterhelfen? Bzw. wer kennt den KeyEvent für die Zeichen?

Vielen Dank für jegliche Tipps!

Gruss
poffi
 

hdi

Top Contributor
Ich hab auch schon mal nach einer Liste der KeyEvent konstanten gesucht, und (zumindest in der API) nicht gefunden..
Sowas muss es doch irgendwo geben
 

poffi

Mitglied
Die Keyevent findet man hier --> http://java.sun.com/j2se/1.4.2/docs/api/java/awt/event/KeyEvent.html

Dabei ist auch VK_MINUS, ist das effektiv der Bindestrich? Oder seht das Minus nur "gleich" aus wie der Bindestrich?

Weiss jemand vielleicht den KeyEvent für "¨"? So könnte ich nämlich die äöü auch generieren?

Oder kann mir jemand zeigen wie ich einen Anschlag von ü, ö oder ä mit C simulieren kann (Dann könnte ich es über JNI lösen)?

Natürlich sind auch weitere Ideen sehr willkommen! Danke!
 

Tobias

Top Contributor
Code:
new KeyEvent(srcComp, KeyEvent.KEY_PRESSED, System
				.currentTimeMillis(), modifiers, KeyEvent.VK_UNDEFINED,
				'ü')

funktioniert bei mir. Es sei denn, ich hab's verkehrt aus meinem Code gefrimmelt. Ist schon so verdammt spät ...
 

poffi

Mitglied
Da kommt wieder Hoffnung auf ;)!

Ich frag mich aber gerade, was ich als Komponete mitgeben muss (also dein srcComp). Brauch den KeyEvent ja um mit der Robot-Klasse einen Klick zu Simulieren?

Bedankt sich und verbleibt mit freundlichen Grüssen :)
 

Tobias

Top Contributor
Ich hab da noch ein altes Testprogramm gefunden, dass ich benutzt habe, um mein ScreenKexBoard zu entwickeln:

Code:
public class SKBTest extends JFrame {

	private class MyTextArea extends JTextArea {

		@Override
		protected void processKeyEvent(KeyEvent e) {
			super.processKeyEvent(e);
			System.out.println(e);
		}

	}

	private class KeyBoardButton extends JButton implements ActionListener {

		private Component source;
		private char keyChar;

		public KeyBoardButton(String text, Component source, char keyChar) {
			super(text);
			addActionListener(this);

			this.source = source;
			this.keyChar = keyChar;
		}

		/**
		 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
		 */
		public void actionPerformed(ActionEvent e) {
			source.dispatchEvent(new KeyEvent(source, KeyEvent.KEY_TYPED,
					System.currentTimeMillis(), getModifiers(),
					KeyEvent.VK_UNDEFINED, keyChar));
		}

	}

	private MyTextArea myTextArea;
	private JButton a;

	public SKBTest() {
		super("SKBTest");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLayout(new BorderLayout());

		myTextArea = new MyTextArea();
		a = new KeyBoardButton("ü", myTextArea, 'ü');

		JPanel skb = new JPanel();
		skb.setLayout(new FlowLayout());
		skb.add(a);

		add(myTextArea, BorderLayout.NORTH);
		add(skb, BorderLayout.CENTER);

		pack();
		setVisible(true);
	}

	public static void main(String[] args) {
		new SKBTest();
	}

	public int getModifiers() {
		return 0;
	}

}
 

poffi

Mitglied
Ich verstehe den Code, aber das Problem ist, dass ich nicht eine Systemeingabe abfangen will, sondern mit der Robot-Klasse eine Ausgabe simulieren will. Das Bedeutet, dass ich keine Komponente habe um ein KeyEvent zu instanzieren. Bzw. welches wär meine Komponente?
 

Tobias

Top Contributor
Hab mit Robot noch nicht gearbeitet, nach einem kurzen Blick in die API scheint es mir aber so, als ob diese Fälle wohl nicht unterstützt werden. Die Methode Robot#keyPress(int) verlangt ja einen KeyCode, der für die deutschen Umlaute aber nicht existiert. VK_UNDEFINED kann ja alles mögliche sein ...

Wenn das ganze nur für ein bestimmtes Java-Programm funktionieren soll (k. A. ob man mir Robot überhaupt andere Programme steuern kann), könnte man die KeyEvents auch direkt in die SystemEventQueue schieben. Laut API-Dokumentation (hab's nicht ausprobiert) müßte das wie folgt gehen:

Code:
java.awtToolkit.getDefaultToolkit().getSystemEventQueue().dispatchEvent(myKeyEvent);

Meiner Erfahrung nach ist die Reihenfolge der Events hier wichtig, hab aber nicht mehr im Kopf, welche Reihenfolge die richtige war. Mit ein bißchen rumspielen mit meinem oben geposteten Code müßtest du das rauskriegen können.

Die Komponente, an die der KeyEvent geschickt werden wird ist in aller Regel die Komponente, die derzeit den Eingabefokus besitzt. Die kannst du dir (vorrausgesetzt, du kennst das oberste Frame der Anwendung) mit Window#getFocusOwner() beschaffen. Vorsicht: Die Methode gibt null zurück, wenn der Eingabefokus nicht bei einem der Kinder des Fensters zu finden ist. Keine Ahnung, wie KeyEvent auf null als source-Component reagiert.
 

poffi

Mitglied
Die kannst du dir (vorrausgesetzt, du kennst das oberste Frame der Anwendung) mit Window#getFocusOwner() beschaffen.
Das geht leider nicht, da ich die Anwendung "nicht kenne". Es handelt sich um ein unabhängiges, nicht Java-Programm.

Habe jetzt aber eine Lösung gefunden. Anstelle eines Ö, Ä oder Ü schick ich einfach den Ascii-Code (www.velocityreviews.com/forums/t136100-virtual-keyboard-whith-robotkeypress.html+robot+swedish+java&hl=de&ct=clnk&cd=9&gl=ch&client=firefox-a]siehe hier[/url]).

Obwohl es mich einbisschen stört, dass das nur auf meinem PC (und nicht auf dem Mac) funktioniert, gebe ich mich mit dieser Lösung zufrieden!

Danke!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Erklährung für Robot KeyEvent anweisungen Allgemeine Java-Themen 2
_user_q JavaFX Robot alle Unicode-Zeichen schreiben lassen können Allgemeine Java-Themen 12
B Woher kommen die Bildschirmkoordinaten beim java Robot? Allgemeine Java-Themen 14
T Java Robot Class - Bot Allgemeine Java-Themen 3
R Input/Output Programmierung mithilfe der Robot Bibliothek Allgemeine Java-Themen 15
N Java Robot Printscreen in bestimmter Konstellation Allgemeine Java-Themen 2
E Robot Allgemeine Java-Themen 2
H Input/Output Robot Tastenereignisse Allgemeine Java-Themen 2
U String und Robot Allgemeine Java-Themen 19
G Screenshot mittels robot ausführen Allgemeine Java-Themen 4
S Alternative zu Robot (wegen Umlauten) Allgemeine Java-Themen 13
S Bestimmte Tasten mit der Robot Klasse? Allgemeine Java-Themen 4
VfL_Freak KeyEvent.VK_TAB im KeyListener abfragen Allgemeine Java-Themen 13
FunnyO KeyEvent.VK_ + int i, ausgeben mit Bot möglich? Allgemeine Java-Themen 2
K KeyEvent in Threads Allgemeine Java-Themen 11
DStrohma Input/Output KeyEvent nur verarbeiten wenn es ein "sichtbares" Zeichen ist? Allgemeine Java-Themen 1
B Swing KeyEvent Problem Allgemeine Java-Themen 2
H KeyEvent auslösen Allgemeine Java-Themen 2
loadbrain KeyEvent mit Variable verknüpfen Allgemeine Java-Themen 4
N KeyEvent / JLabel Allgemeine Java-Themen 5
J java vnc client verbessern: KeyEvent.VK_ALT keine Wirkung? Allgemeine Java-Themen 12
M KeyEvent und Fragezeichen Allgemeine Java-Themen 6
K KeyEvent in eigenem Component geht nicht Allgemeine Java-Themen 3
G Auf KeyEvent reagieren, wenn das Fenster nicht aktiv ist Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben