Textausgabe erzeugen

David12345

Mitglied
Hiho,

bin gerade an einem kleinen eigenem Projekt am herumbastlen und wollte bei einem Klick auf einen Button, das das System darauf Enter drückt, einen Text eingibt und wieder Enter drückt (ist für häufig genutzte Sätze in einem IngameChat gedacht).
Wie also kann ich in meiner ActionPerformed Methode diese Funktionalität unterbringen.
Wäre nett wenn jemand ein kurzes Stück Code als Beispiel postet. Im Vorraus schonmal vielen Dank.
 
Könnte man per Robot erreichen, wäre aber imo ne Schnapsidee.
Wozu willst du den Text eintippen und enter emulieren? :autsch: Da reicht es doch, ihm zum Server/Client zu schicken und ins eigene Chatfenster einzutragen.
 
Ich hab ein Overlay geschrieben und sobald ich einen Button klicke möchte ich das ein von mir bereits festgelegter Text in den Chat geschrieben wird. Der Chat wird mit Enter geöffnet , dann soll der von mir vorgegebene String eingetippt werden und mit nochmaligem Enter abgeschickt.

Also bei drücken des Buttons soll mein Programm ganz einfach KeyEvent.VK_ENTER meintextblablabla KeyEvent.VK_ENTER schreiben.
 
Zuletzt bearbeitet:
Ich weiß zwar nicht, was in Java ein Overlay ist (kenne den Begriff nur von Grafikkarten), aber mit Robot kannst du beliebige Tastendrücke emulieren.
 
Ich habe mit java eine GBO geschrieben für eine Computerspiel und dabei bereits diverse Funktionen eingebaut nun möchte ich aber ganz einfach eine paar Buttons hinzufügen, bei denen auf Click zBsp. Go back , Can u pls play more defensive , ..... in den Chat geschrieben wird




edit: also ich habe das jetzt mal schnell runtergeschrieben
Java:
String s1 = s.replace("_", " ");
                    Robot robot = null;
                    try
                    {
                        robot = new Robot();
                    }
                    catch (AWTException e1)
                    {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }                               
                    
                    robot.keyPress(KeyEvent.VK_ENTER); 
                    for(int i = 0; i<s1.length();i++) 
                    {
                        robot.keyPress(s1.charAt(i));
                    }
                    robot.keyPress(KeyEvent.VK_ENTER);
 
Zuletzt bearbeitet:
Jetzt musste ich erst mal googlen. Wer kommt denn darauf, dass GBO soviel wie GUI, also vermutlich Graphische Benutzeroberfläche heißt? ^^

Du wirst es doch wahrscheinlich so haben, oder?

Java:
{
	irgendwas.add(new JButton(new AbstractAction("Enter") {
		writeToChat(chatField.getText());
	}));
}
private void writeToChat(String text) {
	text = filterIllegalChatChars(text);
	chatOutputArea.append(text);
	chatOutputArea.append('\n');

	distributeChatText(text);
}

Wäre es da nicht viel geschickter es so zu machen, anstatt die Robot zu verwenden?

Java:
{
	irgendwas.add(new JButton(new AbstractAction("Enter") {
		writeToChat(chatField.getText());
	}));

	irgendwas.add(new JButton(new AbstractAction("Macro") {
		writeToChat("Can u pls play more defensive?");
	}));
}
private void writeToChat(String text) {
	text = filterIllegalChatChars(text);
	chatOutputArea.append(text);
	chatOutputArea.append('\n');

	distributeChatText(text);
}
 
Also mein Code sieht so aus. Vorher wird noch ein String[] mit Namen "list" initialisiert mit den jeweiligen Nachrichten.


Java:
 for (int i = 0; i < list.length; i++)
        {
            WriteButton button = new WriteButton();
            final String s = list[i];
            Image image = ResourceLoader.getImage(s);
            image = image.getScaledInstance(lct.getImageSize(), lct.getImageSize(), Image.SCALE_SMOOTH);
            button.setBackgroundImage(image);
            button.addMouseListener(new MouseAdapter()
            {

                @Override
                public void mousePressed(MouseEvent e)
                {
                    String s1 = s.replace("_", " ");
                    Robot robot = null;
                    try
                    {
                        robot = new Robot();
                    }
                    catch (AWTException e1)
                    {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }                               
                    
                    robot.keyPress(KeyEvent.VK_ENTER); 
                    for(int i = 0; i<s1.length();i++) 
                    {
                        robot.keyPress(s1.charAt(i));
                    }
                    robot.keyPress(KeyEvent.VK_ENTER); 

                }


gibt es dafür noch bessere Lösungen ??
 
Zuletzt bearbeitet:
Ich finde die Idee nicht schlecht. Klar kann man bei nem Knopfdruck auch direkt das auszulösende Event absetzen ohne den Knopfdruck zu emulieren aber falls weitere gleiche Effekte gewünscht sind wie bei einem Buttonklick, passt das schon so.
 
Hey,

mich würde ja mal interessieren, wie du das emulierte Tastenereignis dann an die entsprechende Anwendung (deinen Spielchat) weitergeleitet hast. Bei Mausereignissen geht das ja einfach, da man den Mauszeiger ja in das betreffende Fenster setzen kann, aber bei Tastenereignissen? Irgendwo sollte man eine Art Liste haben, welche Programme dann auf die Ereignisse hören, wenn ich mich recht erinnere, hieß sowas HookUpChain, aber wie baut man die?

[EDIT]Hab´s jetzt brachial gelöst, also einfach einen Mausklick im btereffenden Fenster simuliert, aber weder die genaue Methoide dafür gefällt mir noch dieses Vorgehen.
[/EDIT]

[EDIT]
Ich erstell einfach mal ein eigenes Thema hierfür, sonst wird das hier wieder eine Themenschlacht...[/EDIT]
 
Zuletzt bearbeitet:
Hallo,

1. man hijackt keine Threads.

2. es gibt eine Edit-Funktion um Doppel Posts zu vermeiden.

3. Eventuell mal "java robot tutorial" googeln.

Das sind Basics.

PLease close this.
 

Zurück
Oben