# jtextfield  kopieren und einfügen



## Oni (27. Mai 2005)

servus, 

ich habe ein jtextfield und würde da gerne mit der rechtenmaustaste kopieren und einfügen können(wie bei windoof eben)

jetzt habe ich im javahandbuch geguckt und auch was gefunden wovon ich dachte das es geht, das popupmenu.

das habe ich jetzt bei mir in den code eingebaut, aber wenn ich jetzt über das jtextfield gehe und die rechtemaustaste drücke passiert nichts, neben dem textfield (auf dem hintergrund) geht es. muss ich da noch irgend einen listener add'en. oder gibt es eine ganz andere lösung und das popupmenu ist für sowas total falsch?


----------



## L-ectron-X (27. Mai 2005)

Schau dir mal die Klassen aus java.awt.dnd an.
Du brauchst dies vielleicht, weil diese Klassen für die Programmierung von drag 'n drop unter Java vorgsehen sind.


----------



## Sky (27. Mai 2005)

Du musst einen Mouselistener auf dein JTextField adden. (wenn dies noch keinen hat)

Außerdem mußt Du ein JPopupMenu verwenden anstatt popupmenu, da sich SWING und AWT nicht so recht vertragen


----------



## Oni (27. Mai 2005)

gibt es irgendwo ein anschauliches beispiel zu dnd? ich finde nur welche die mir zu kompliziert vorkommen und mit dem was in der api steht komme ich auch nicht klar.

es kann doch eigentlich nicht so schwer sein per copy&passed etwas in ein jtextfield einzufügen.


----------



## Sky (27. Mai 2005)

War dies dein Ziel:


```
JTextField tf = new JTextField();
this.getContentPane().add( tf, BorderLayout.CENTER );

final JPopupMenu contextMenu = new JPopupMenu( "Teste" );
contextMenu.add( new JMenuItem( "Copy" ) );
contextMenu.add( new JMenuItem( "Paste" ) );

tf.addMouseListener( new MouseAdapter() {
  public void mouseReleased( MouseEvent e ) {
    if( e.isPopupTrigger() ) {
      contextMenu.show( (Component)e.getSource(), e.getX(), e.getY());
    }
  }
} );
```


----------



## Oni (27. Mai 2005)

hmm

das sieht ja gut aus und wenn ich das so einbaue, bekomme ich auch auf dem feld kopieren bzw einfügen angezeigt.

aber wirklich text einfügen/kopieren kann ich nicht. was muss ich noch beachten damit das funzt?


----------



## Sky (27. Mai 2005)

Du mußt noch einen ActionListener hinzufügen für die beiden Items und dort erklären wie copy & paste funktioniert!


----------



## Oni (27. Mai 2005)

auf die idee kam ich auch aber irgendwas funzt da immernoch nicht.
zumal ich nicht wusste wie ich hier den actionlistener einbaue.

```
contextMenu.add( new JMenuItem( "Paste" ) );
```

deswegen habe ich das so gemacht.


```
JMenuItem einfuegen = new JMenuItem("Einfügen");
contextMenu.add(einfuegen);
einfuegen.addActionListener(this);
```

jetzt muss ich noch hier auf die ereignisse reagieren? oder? wenn ja wie?

```
public void actionPerformed(ActionEvent e)
{
}
```


----------



## Sky (27. Mai 2005)

Du verfolgst den richtigen Ansatz!


----------



## Oni (27. Mai 2005)

ich komme mir vor als würde ich die nadel im heuhaufen suchen ;-)

```
public void actionPerformed(ActionEvent e)
{
 if(e.getSource() == einfuegen)
 {
   jtextfield.setText(--text-aus-cache--);
   //ich habe keine ahnung :-(
  }
 if(e.getSource() == kopieren)
 {
   jtextfield.getText(--text-in-cache--);
  }
}
```


----------



## Oni (27. Mai 2005)

in allen beispielen die ich finde wird so auf die ereignisse reagiert. aber das hilft mir nicht weiter kannst du mir nicht nochmal einen tipp geben?

```
String action = e.getActionCommand();
        System.out.println( "e.getActionCommand() = " + action );
```


----------



## Roar (27. Mai 2005)

benutze doch einfach die Actions aus DefaultEditorKit


----------



## Oni (27. Mai 2005)

ich habe leider keine ahnung vom DefaultEditorKit im forum finde ich dazu nur 4 beiträge die mir alle nicht weiter helfen, und im javahandbuch steht das auch nicht.

hast du ein link wie man den/das anwendet?


----------



## L-ectron-X (28. Mai 2005)

Nachtrag: Wenn du Copy & Paste nur innerhalb eines Java-Programms machen möchtest, brauchst du nicht das java.awt.dnd Package einbinden. Wenn du Texte etc. innerhalb des Systems mit Java austauschen möchtest, kommst du nicht drum herum.
Ansonsten halte dich an die Tipps von sky80 und Roar.


----------



## Oni (28. Mai 2005)

ich möchte etwas aus einem browser raus kopieren und in das java programm einfügen.

also brauche ich dnd ?!

und über defaulteditorkit finde ich leider nichts was für mich verständlich ist.


----------



## L-ectron-X (28. Mai 2005)

Wenn du Texte per Copy & Paste aus einem Programm außerhalb der laufenden VM in dein Java-Programm bringen willst, brauchst du das Package java.awt.dnd.
Aber möglicherweise kannst du aus den Webseiten etwas herausparsen, wenn es immer die gleiche(n) Seite(n)/Dinge ist/sind.
Wenn es aber immer verschiedene Seiten sind, mit verschiedenem Content, den du herausziehen möchtest, behält das bisher gesagte Gültigkeit.
Ich habe leider kein Beispiel für die Arbeit mit Klassen des java.awt.dnd-Paketes. In irgendeinem dicken Wälzer habe ich aber eins drin.


----------



## Dreezard (28. Mai 2005)

Also das Clipboard ist hierfür doch ideal.
In "Java ist auch eine Insel" gibt es auch eine ganz gute Seite dazu


----------



## Oni (28. Mai 2005)

gut, schon mal danke ich guck mir das mal an.


----------



## Oni (28. Mai 2005)

das mit dem clipboard funktioniert super,

Danke


----------



## Roar (28. Mai 2005)

so:


```
JPopupMenu menu = new JPopupMenu();
menu.add(DefaultEditorKit.CutAction);
menu.add(DefaultEditorKit.CopyAction);
menu.add(DefaultEditorKit.PasteAction);
```

 :?:


----------



## L-ectron-X (28. Mai 2005)

@Roar: Schließt das den Datenaustausch über die Grenzen der VM mit ein? Oder geht das nur innerhalb der VM?


----------



## Roar (28. Mai 2005)

selbstverständlich benutzen die die Clipboard klasse (wär ja ganz schön doof wenn nicht :autsch


----------

