# Cursor in JTextPane versetzen?



## estartu (26. Jul 2006)

Hallo.

Ich habe ein JTextPane und moechte in diesem den Cursor
mit einem Mausklick an irgend eine Stelle setzen
um dort einen Text einzutippen.

Mit der Tab-Taste laesst sich der Cursor verschieben, aber wie geht das mit
der Maus?

Kann kein "setCursorPosition..." oder so finden.

estartu


----------



## Guest (26. Jul 2006)

manchmal hilft einfach ein Blick in die API


----------



## Leroy42 (26. Jul 2006)

... und richtig Spaß macht es, wenn man noch dazu weiß (darauf hingewiesen wird),
daß sich eine Textcursor gerne mit Caret ansprechen läßt.

Dann klappt's auch mit der Suche


----------



## estartu (26. Jul 2006)

Hallo.
Weiss jetzt auch das es wohl mit setCaretPosition(int arg0); geht.

Nuetzt mir aber nichts.
Das geht nur wenn schon text in meinem JTextPabe steht.
Dann kann ich den Cursor an eine bestimmte stelle innerhalb des Textes versetzen.

Ich will aber in einem leeren JTextPane den Cursor an eine bestimmte
stelle setzen und dann dort den ersten Text eingeben.

Trotzdem vielen Dank.


estartu


----------



## Leroy42 (26. Jul 2006)

Das kann nicht gehen, wie du mit (fast) jedem x-beliebigen Editor nachprüfen
kannst, der das auch nicht anbietet.

Du könntest deinem Pane einen zusätzlichen MouseListener verpassen, der anhand
der Koordinaten berechnet, wo du bei derzeitigem Font (Größe, monospaced, ...)
_wahrscheinlisch_ hin willst und entsprechende Leerzeichen- und zeilen 
einfügt.

Das wäre dann aber doch ziemlich verkorkst  :autsch: 

Ein Editorpane ist in erster Linie schließlich keine Zeichenfläche.  :noe:


----------



## estartu (26. Jul 2006)

Hallo.

Ich will ja nicht zeichen aber meinen text den ich tippen will will ich halt frei plazieren koennen. 
Ich brauche eine Oberflaeche in meinem Programm wie sie zum Beispiel Word bietet.
In Word kann ich auf der Seite überall hin klicken und dann dort meinen Text schreiben.

Das soll in meinem Programm auch moeglich sein.

Ausserdem will ich in meinem Programm mit copy und paste texte und bilder 
ueberall frei plazieren koennen.
Einen besseren Vorschlag als JTextPane???


estartu


----------



## SamHotte (26. Jul 2006)

OpenOffice


----------



## Leroy42 (26. Jul 2006)

Sicher doch!

JPanel!

Darin kannst du nach Herzenslust alles nur denkbare implementieren.

Aber schnell mal eine Art Word aus dem Ärmel schütteln zu wollen kannst du abschreiben(*)



(*) Naja, dessen einzigartige Programmcode-Struktur nachzubilden wirst du vielleicht
schon schaffen; aber ob das hilfreich für eine Programmierkarriere ist, darf dann doch
stark bezweifelt werden.


----------



## Leroy42 (26. Jul 2006)

SamHotte hat gesagt.:
			
		

> OpenOffice


in Verbindung mit Word in einem Thread erwähnt?


Das bringt mich doch glatt auf eine Idee    :bae:


----------



## estartu (27. Jul 2006)

Ich will doch kein Open Office. Habe ich zwar will ich aber nicht.

Ich will auch kein neues Word mal eben so schnell aus dem Aermel schuetteln.

Gibts ja schon.

Ich will ein programm schreiben was halt die eigenschaft hat das man
text auf der oberflaeche eintippen kann und das man 
mit copy und paste texte oder bilder darauf plazieren kann.

Nun zu JPanel. Ich weiss das ich in einem JPanel Componenten plazieren kann und auch Bilder.
Kann ich in ein JPanel aber auch einen text eintippen?

Das waere mir neu. Lasse mich aber gerne belehren.

estartu


----------



## André Uhres (28. Jul 2006)

estartu hat gesagt.:
			
		

> ..In Word kann ich auf der Seite überall hin klicken und dann dort meinen Text schreiben..


Aber nicht bei einem leeren (neuen) Dokument, nein, das geht nicht  :noe:


----------



## estartu (29. Jul 2006)

Hallo.
Das mit dem in Word überall hinklicken geht natürlich nicht, habe es ausprobiert.
Habe Word schon tausend mal benutzt aber wohl nie richrig aufgepasse.

estartu


----------



## Wildcard (29. Jul 2006)

Offtopic:
Vieleicht hat dich ja nur das 'Programm zur Verbesserung der Benutzerfreundlichkeit von M$-Office' abgelenkt...
Zum Glück gibt's OpenOffice


----------



## Illuvatar (29. Jul 2006)

André Uhres hat gesagt.:
			
		

> estartu hat gesagt.:
> 
> 
> 
> ...



Höh? Natürlich geht das (Office 2007 Beta, aber in 2003 gings afair auch). Das macht dann eben entsprechend viele Zeilenumbrüche und platziert nen Tabstop.


----------



## Leroy42 (29. Jul 2006)

estartu hat gesagt.:
			
		

> Nun zu JPanel. Ich weiss das ich in einem JPanel Componenten plazieren kann und auch Bilder.
> Kann ich in ein JPanel aber auch einen text eintippen?
> 
> Das waere mir neu. Lasse mich aber gerne belehren.
> ...




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

public class Irgendwo extends JFrame {
	JPanel area = new Area();
	public Irgendwo() {
		add(area, BorderLayout.CENTER);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setBounds(200, 200, 300, 300);
		setVisible(true);
	}
	public static void main(String[] args) {
		Toolkit.getDefaultToolkit().setDynamicLayout(true);
		new Irgendwo();
	}
}

class Area extends JPanel {
	int x,y;
	public Area() {
		addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				x = e.getX();
				y = e.getY();
				repaint();
			}});
	}

	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		if (x!= 0)
			g.drawString("Hier hin will ich nicht :-(", x, y);
	}
}
```

Laß' klicken Kumpel!


----------



## André Uhres (29. Jul 2006)

Illuvatar hat gesagt.:
			
		

> André Uhres hat gesagt.:
> 
> 
> 
> ...


Ja, hab mich geirrt. Ich hab's natürlich probiert, egal wo ich hinklickte konnte ich keinen Text eingeben.
Nach deinem Hinweis hab ich's dann statt mit Klicken einmal mit *Doppelklicken *versucht, und siehe da: dann geht's. Kann natürlich niemand wissen, der mit Word nur ab und zu ein paar Kleinigkeiten erledigt.


----------



## estartu (31. Jul 2006)

Hallo Leroy42.
Ja der Programmtext geht.
Muesste mich dann halt darum kuemmern die Tastatur auszulesen und so weiter.
Das woltte ich halt verhindern indem ich einnen anderen container benutze der
schon solche Texteigenschaften hat.
Nehme deshalb auch JTextPane.

Nun aber noch eine Frage zu deinem Programm.
Warum     "public void paintComponent(Graphics g)"
und nicht   "public void paint(Graphics g)" 


estartu


----------



## Leroy42 (31. Jul 2006)

estartu hat gesagt.:
			
		

> Nun aber noch eine Frage zu deinem Programm.
> Warum     "public void paintComponent(Graphics g)"
> und nicht   "public void paint(Graphics g)"



Eine ganz wichtige Frage:

Seit Swing *darfst* du (de facto) die _paint_-Methode nicht mehr 
überschreiben. Sie kümmert sich noch um andere Sachen wie den
Aufruf von _paintComponents_ und das evtl. Zeichnen des Borders.

Für *alle* Swing-Komponenten ist der Normalfall _paintComponent_
zu überschreiben.

Das das Neu-Erfinden des JTextPane-Rades 'n bischen viel auf einmal
ist sollte klar sein.

Hast du schonmal versucht, dem JTextPane einen zusätzlichen MouseListener
zu verpassen, der dein Anliegen über die Koordinaten erledigt?

Ich denke aber, daß der Aufwand den Nutzen bei weitem übersteigt.


----------



## André Uhres (31. Jul 2006)

http://www.java-forum.org/de/viewtopic.php?p=140523#140523


----------



## Leroy42 (31. Jul 2006)

André Uhres hat gesagt.:
			
		

> http://www.java-forum.org/de/viewtopic.php?p=140523#140523


Genau das hatte ich ja gemeint (wenn ich es so genau gewußt hätte)


----------

