java robot

lildavesflava
java robot

I have a java application in which i want to simulate ctrl c, ctrl v and ctrl x
here is a part of the code i used inside a mouse listener

else if(event.getActionCommand().equals("Cut"))
{
System.out.println("cut call");
robot.keyPress(KeyEvent.VK_CUT);
robot.keyRelease(KeyEvent.VK_CUT);
}

and this doesn t work
if i do a KeyEvent.VK_C instead per example it works c will appear in the textfield am targetting but copy wont work
i also try

else if(event.getActionCommand().equals("Cut"))
{
robot.keyPress(control);
robot.keyPress(KeyEvent.VK_X);
robot.keyRelease(KeyEvent.VK_X);
robot.keyRelease(control);
System.out.println("cut call");
}

no result
I am using a mac os but i test my code on window and as on mac no result.
The reason why i am using robot is because i want people to be able to copy from my application and to copy outside of my application
Thanks in advance


Ps
here is a code which i should have included

if(System.getProperty("os.name").startsWith("Mac OS"))
{
control = 157;
}
else
{
control = KeyEvent.VK_CONTROL;
}

157 is what i get when i press the apple key on my keybord

fredericmazue

Quote:
I have a java application

First of all you have to speak french here :)
lildavesflava

désole je n ai pas fait attention en postant ce message. N ayant recu aucune réponse sur le forum de java qui est en anglais j ai directement fait un couper coller. Bon reformulons ceci.
J essaie de simuler un ctrl c et ctrl v a l intérieur de mon application.
j ai essayer le code ci dessus mais sans réponse. Ce qui est bizarre c est que si j essaye un VK_e par exemple e apparait dans mon textfield mais avec la combinaison ctrl et c rien n est copier ou rien n est coller. J aimerai que l utilisateur puise faire un click droit a l intérieur de mon application et coller du texte qu il aurait copier depuis un autre emplacement
voila
wallou

fredericmazue

Quote:
N ayant recu aucune réponse sur le forum de java qui est en anglais j ai directement fait un couper coller. Bon reformulons ceci.
J essaie de simuler un ctrl c et ctrl v a l intérieur de mon application.

Reformulons, tu es obsédé par le copier-coller tous azimuts ;) :lol:

Quote:
mais avec la combinaison ctrl et c rien n est copier ou rien n est coller. J aimerai que l utilisateur puise faire un click droit a l intérieur de mon application et coller du texte qu il aurait copier depuis un autre emplacement

Houlà....
Si tu veux faire ça aussi simplement alors fait le avec autre chose que ¤¤¤¤ Java.
En Java le presse-papier est aussi lourdingue que le reste. Je t'encourage à aller lire la javadoc dans java.awt.datatransfer.
Pour notamment les classes Clipboard, ClipboardOwener, Transferable, StringSelection, (aussi je crois) et surtout sans oublier les bouzins de DataFlavor.

Bon amusement :)

lildavesflava

merci pour ta reponse
mais le fait est que je suis presque a la fin du developpement d une application qui s est etallee sur 6 moi, c est certainement pas maintenant que je vais changer de langague
je vais jeter un coup d oeil aux classes pre citer tx

fredericmazue

Quote:
c est certainement pas maintenant que je vais changer de langague

Il n'est jamais trop tard pour bien faire ;)

Enfin bon, ça ne serait peut être pas très sage de changer maintenant en effet :)

6 mois... hum. Si ça se trouve avec autre langage il aurait fallu 6 semaines ;) :lol:

Si tu es lecteur de Programmez!, il y a eu un article qui expliquait le clipboard en Java, mais c'était il y a assez longtemps (Je ne me rappelle pas le numéro pour l'instant, mais je pourrais le retrouver si tu penses que ça peut t'aider)

Niroken
Une aide:)

Voici un code qui permet de faire un copier coller
avec le robot.

L'utilisation du code est simple :
1) tu mets n'importe quoi dans le premier JTextfield
2)avec la souris tu sélectionnes le n'importe quoi
3)tu cliques droit -> ca fait un copier de ce que tu as sélectionné
4)tu cliques droit sur le second JTextField et ca colle ce qui a été
copié.
Bonus)si tu copie qq chose depuis nimporte ou ca le collera aussi
si tu cliques droit dans le second JTextField

Bon c'est un peu un code qui ne sert a rien mais j'espère
que ca t'aidera.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class UneFenetre
{
	public static void main (String[] args)
	{
		Fenetre fenetre = new Fenetre();
	}
}

class Fenetre extends JFrame implements MouseListener
{
	JTextField jTextField1 = new JTextField(6);
	JTextField jTextField2 = new JTextField(6);
	
	public Fenetre()
	{
		setTitle("SARJEL");
		setLocation(200, 200);
		setSize(200, 200);
		
		setLayout(null);
		
		jTextField1.setBounds(10, 10, 100, 20);
		jTextField1.addMouseListener(this);
		jTextField2.setBounds(10, 50, 100, 20);
		jTextField2.addMouseListener(this);
		
		add(jTextField1);
		add(jTextField2);
		
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
	
	public void mouseClicked(MouseEvent e)
	{
		if (SwingUtilities.isRightMouseButton(e))
		{
			try
			{
				Robot robot = new Robot();
				if ((JTextField) e.getSource() == jTextField1)
				{	
					robot.keyPress(KeyEvent.VK_CONTROL);
					robot.keyPress(KeyEvent.VK_C);
					robot.keyRelease(KeyEvent.VK_CONTROL);
					robot.keyRelease(KeyEvent.VK_C);
				}
				if ((JTextField) e.getSource() == jTextField2)
				{
					robot.keyPress(KeyEvent.VK_CONTROL);
					robot.keyPress(KeyEvent.VK_V);
					robot.keyRelease(KeyEvent.VK_CONTROL);
					robot.keyRelease(KeyEvent.VK_V);
				}
			}
			catch (Exception ex)
			{
				
			}
		}
	}
	
	public void mousePressed(MouseEvent e)
	{
	
	}
	
	public void mouseReleased(MouseEvent e)
	{
	
	}
	
	public void mouseExited(MouseEvent e)
	{
	
	}
	
	public void mouseEntered(MouseEvent e)
	{
	
	}
}

Bonne chance

fredericmazue

Quote:
Voici un code qui permet de faire un copier coller
avec le robot.

Bel effort à nouveau :)
Pardonne moi, mais avec ton exemple non seulement le copier-coller est fait dans l'application, mais il est fait d'un contrôle contenant du texte vers un contrôle contenant du texte. Là oui c'est facile.
Mais ça ne répond pas il me semble à la question telle qu'elle était posée.
Quote:
The reason why i am using robot is because i want people to be able to copy from my application and to copy outside of my application

D'abord il s'agit de faire un copier-coller de l'appli vers l'extérieur en passant par le clipboard de l'OS et ensuite rien ne garantit qu'il y a concordance de types pendant l'opération. Par non concordance de types je veux dire que l'utilisateur peut fort bien essayer de copier du texte d'un contrôle java vers un contrôle image natif dans l'OS, ou réciproquement. Et d'ailleurs même un copier-coller de texte vers texte dans cette situation n'est pas forcément immédiat. Et là il faut faire joujou avec les classes Clipboard, Dataflafor et compagnie :(
Niroken

Hé hé:)

Compiles mon bazard, tu peux copier n'importe quel texte depuis ton
poste et le coller dans le JTextfield2
Inversement tu peux copier un texte dans le JTextField1 et le
coller ou tu veux "bloc note ou que sais je..."

Bon le hic c est que j'avais pas vu l'intéret réel du robot ici
mais bon:)

Quote:
J aimerai que l utilisateur puise faire un click droit a l intérieur de mon application et coller du texte qu il aurait copier depuis un autre emplacement

Et mon appli fait sa très bien avec le clic droit:) ah mais jsui pas fou :D
Et puis il me semble qu'il ne s'intéresse ici qu'au texte on ne va pas
creuser de trop non plus :wink:

fredericmazue

Quote:
Compiles mon bazard

C'est fait depuis longtemps.
Tu me connais mal ;) :lol:
Quote:
Compiles mon bazard, tu peux copier n'importe quel texte depuis ton
poste et le coller dans le JTextfield2
Inversement tu peux copier un texte dans le JTextField1 et le
coller ou tu veux "bloc note ou que sais je..."

Non non, pas que sais-je ;)
Comme je suis un gars particulièrement retord, j'ai fait un essai de mon très cher Emacs sous un de mes très chers Linux/Gnome. Et bien sûr ça ne marche pas ;)
Bon je le reconnais, je suis un peu vicieux :), j'ai pas pris le cas le plus aimable. Si j'avais fait avec le bloc-note de Windows, ça eut très certainement marché :)

Quote:
Et mon appli fait sa très bien avec le clic droit:) ah mais jsui pas fou

Non tu n'es pas fou. :)
Quote:
Et puis il me semble qu'il ne s'intéresse ici qu'au texte on ne va pas
creuser de trop non plus

Faut quand même creuser un peu le cas Emacs ;)
Ou laisser tomber l'idée du robot. Car pour en revenir au texte, la JVM fournit une implémentation par défaut de la gestion du Clipboard, mais seulement pour le texte. C'est pour ça que ça marche "presque". Mais pour un mécanisme plus général, par exemple avec des images, tu peux pas le faire simplement "de l'extérieur" avec le robot. Enfin à ma connaissance.
Niroken

Ah je vois y a des vilains qui travaillent sous linux, lol.

Bon je t'avoue que effectivement dans ce cas la, je ne
puis pas faire grand chose, mais hmmm
il y aurait peut etre moyen de détecter sur quel "OS"
tourne la JVM et enf onction utiliser la combinaison
de touche adéquate pour faire un copier coller sur ton
éditeur favori. *tousse* lol.

fredericmazue

Quote:
Ah je vois y a des vilains qui travaillent sous linux, lol.

Vilains et fiers de l'être lol :lol:
Sous Linux et pas avec n'importe quoi hein ? Avec Emacs. Je suis même un intégriste d'Emacs. J'aime les outils qui vont bien :)

Quote:
il y aurait peut etre moyen de détecter sur quel "OS"
tourne la JVM et enf onction utiliser la combinaison
de touche adéquate pour faire un copier coller sur ton
éditeur favori

En voilà une question quand le langage prétend être portable. "Write once Run Everywhere", patati, ptata :lol:
Bon tu es encore nouveau (et bienvenu) sur ce forum, mais tu l'as sans doute déjà remarqué, Java je ne l'estime pas beaucoup :lol:
Quote:
*tousse*

:lol: