String RightToLeft Direction

Status
Nicht offen für weitere Antworten.
S

sibianu

Gast
Hallo,

ich habe ein kleines, oder vielleicht auch grösseres Problem mit Texte, die verschiedeneBiDi-Elemente beinhalten, in einem Textfield.
Um die Probleme zu vermeiden habe ich mir einen eigenen Document gebastelt, dass keine Bidi-Elemente mehr beinhaltet, und somit auch keine RightToLeft Richtung. sprich ich kann einen text auf persisch z.B. schreiben und meine Positionen bleiben mit 0 ganz links. Ich hoffe das ich das einigermassen verständlich ausgedrückt habe. :D
Mein Problem ist jetzt, dass ich die Tastatur auf persisch umschalte, schreibe etwas im Textfield und alles klappt wunderbar, sieht zumindest so aus, ich verstehe leider kein persisch. :) Ich muss dazu noch sagen, dass ich einen eigenen Buffer im Hintergrund habe, der mir jede Eingabe händelt. Bei Eingaben von Text nehme ich den bisherigen Inhalt, füge die Eingabe an die Richtige Stelle und dann füge ich mit setText() den Text wieder ein. Und hier ist schon mein Problem: dieser String, der mit persische Buchstaben gefüllt ist, ist im Prinzip trotzdem Rechts-Links. Wenn ich diesen Text jetzt mit setText auf mein TextField setze bildet er mir die Positionen anscheinend gespiegelt, die Breite des ersten Buchstabe entspricht jetzt die Breite des letzten Buchstabe. Da ich die persischen Buchstaben und deren Breite nicht kenne ist mir das erst aufgefallen als ich noch irgendwelche Zahlen einfügte.
Hat jemand eine Idee wie ich diesen String sage, dass er mir den Inhalt immer Links-Rechts schreibt? Ich habe leider noch nicht den Zusammenhang zwischen der String-Klasse und dieser Directions gefunden. Oder gibts intern irgendwelche Eigenschaften die man Einstellen kann? Ich weiß nur, dass es früher solche Eigenschaften gab wie "dir" in der Stringklasse, die werden aber schon seit der Version 1.2 glaube ich nicht mehr benutzt.

Danke im voraus,
sibianu
 

Tobias

Top Contributor
Ein String weiß nicht, wie er dargestellt wird - eine Suche nach solchen Einstellungen an dieser Stelle ist also zwecklos. Die einzigen Klassen, die mir einfallen, die sich mit String-Darstellung auf diesem Niveau beschäftigen sind die in java.awt.font - ich habe aber keine Ahnung, ob du da an der richtigen Stelle bist.

mpG
Tobias
 

Ebenius

Top Contributor
Wenn ich es richtig verstehe, benutzt das AbstractDocument eine private Methode calculateBidiLevels(int, int) zur Berechnung der Levels und nutzt dazu die java.text.Bidi-Klasse.

Schau Dir mal den Code dazu an. Vielleicht hilft der Dir, die Problematik besser zu verstehen. Mehr hab ich dazu leider auch nicht.

Grüße, Ebenius
 
G

Guest

Gast
Dass ich einen eigenen Document benutze ist richtig, basiert allerdings auf den normalen Document und nicht auf den Abstract-Document. Das mit den BiDi muss ich allerdings vielleicht etwas deutlicher erklären:
Mein Document kennt also gar keine BiDi-Elemente mehr, er erstellt noch nichtmal welche, egal ob ich nur eine Text-Richtung habe oder nicht. Die habe ich einfach wegmachen müssen, da ich mit mehrere BiDis ein Haufen Probleme hatte wie z.B. 2 x die Caret-Position 0, von denen ich nur eine ansprechen konnte. Warum ich das jetzt machen muss ich jetzt eigentlich Nebensache.
Das Problem ist jetzt nur, dass mein Document jetzt sowas wie BiDi nicht mehr kennt, aber der String, den ich mit setText() einfügen will, anscheinend schon. Ich habe mir die String-Klasse angeschaut, finde aber kein Zusammenhang zwischen String und BiDi oder dieser "di18n"-Eigenschaft.
In der String-Klasse gibts eine interne Var "char value[]", wo der eigentliche Text drinsteht. Für normale LeftRight-Schriftarten fängt der Text bei value[0] an und geht dann weiter bis value[n]. Bei RightLeft-Schriftarten speichert er aber den Text umgedreht ab, sprich den ersten Buchstabe oder Zeichen bei value[n] und den letzten bei value[0]. Da mein Document jetzt aber nur noch eine Richtung kennt, erstellt er mir die Caret-Positionen gespiegelt. Man merkt es wenn man mit den Pfeil-Tasten nach links oder rechts geht, dass die Breiten der Positionen eigentlich den Breiten des auf der anderen Seite des Textes liegenden Zeichen entspricht. Wenn also beispielsweise "w i" eine RightLeft-Sprache wäre, würde die Position von "w" die Breite von "i" haben und andersrum. :autsch:
Ich hoffe ich habe mich heute etwas deutlicher ausgedrückt, und dass mir jemand mal helfen kann. Ich werde mir in der Zwischenzeit auch die java.text.Bidi-Klasse anschauen, vielleicht finde ich doch einen Zusammenhang mit der String-Klasse.

Danke im voraus,
sibianu
 

sibianu

Mitglied
Also irgendwie habt ihr beide Recht, es gibt sowohl in der BiDi-Klasse als auch in der Font-Klasse RightToLeft-Handling, aber ich finde das ist schon etwas zu weit. Mein Problem ist eigentlich schon viel weiter vorher, bei mir ist der String schon falsch rum, ein String hat noch kein Font und hat auch erstmal nichts mit BiDi zu tun, oder täusche ich mich da? Ich habe eigentlich nur diesen Char-Array der falschrum gespeichert wird.
 

Ebenius

Top Contributor
sibianu hat gesagt.:
bei mir ist der String schon falsch rum
Das sehe ich auch so. Ist wohl falsch. ;-)

sibianu hat gesagt.:
ein String hat noch kein Font
Richtig.

sibianu hat gesagt.:
und hat auch erstmal nichts mit BiDi zu tun, oder täusche ich mich da?

Da täuschst Du Dich wahrscheinlich; zumindest ein bisschen. Es gibt gewisse Regeln in welcher Reihenfolge Zeichenketten dargestellt werden müssen. Den gesamten String herum zu drehen, wenn der Input arabisch ist, geht halt bei Ziffern schief, da diese LTR sind.

Bekommst Du das Problem nicht ohne eigenes Dokument hin?

Ebenius
 

sibianu

Mitglied
Leider nicht, irgendwie ist Java nicht für die Benutzung von mehrere Sprachen gedacht, diese BiDi-Elemente sind einfach nur Schrott. Da ich sowieso jede Eingabe abfange kann ich doch auf diese BiDis verzichten und die Sachen so einfüge wie ich will. Ich habe leider keine andere Lösung gefunden und meine Kollegen auch nicht.
Ich kann mir noch vorstellen, dass diese "i18n"-Eigenschaft, die vom System kommt, und auch in der BiDi-Klasse abgefragt wird, Schuld ist. Ich finde aber wirklich keine Verbindung zwischen der String-Klasse und der BiDi-Klasse oder dieser Eigenschaft. :(
 

sibianu

Mitglied
Ok, angeblich kann man die Positionierung in der TextLayout-Klasse beeinflussen, muss nur noch eine gute Verbindung dahin finden. Ich glaube das müsste gehen wenn man über drawString() an den GlyphVector dankommt und von da an den GlyphRenderer. Ich sage bescheid wenn das funktioniert, falls das überhaupt jemand interessiert, ansonsten danke ich euch schon mal für die Tips. Wenn es nicht klappt dann nerbve ich euch ein bisschen weiter. :))
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C EML Email Text in String wandeln Allgemeine Java-Themen 11
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
JAnruVA Datentypen Berechneten String-Wert in Double umwandeln um weiter zu rechnen Allgemeine Java-Themen 7
M String Allgemeine Java-Themen 10
M Suche nach String mit unbekannten characters Allgemeine Java-Themen 53
kodela String kann nicht zu Pfad konvertiert werden Allgemeine Java-Themen 16
melaniemueller Einzelne Zeile aus einer txt Datei in einem String speichern Allgemeine Java-Themen 12
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
M Map<String,String>funktioniert nicht richtig Allgemeine Java-Themen 4
O String in Long Hexerdezimal umwandel Allgemeine Java-Themen 14
N String vergleichen. Allgemeine Java-Themen 27
P String.replace() funktioniert nicht? Allgemeine Java-Themen 3
SaschaMeyer Arbeitet String.split falsch? Allgemeine Java-Themen 4
M Switches ohne String Allgemeine Java-Themen 18
AmsananKING String Iteration Allgemeine Java-Themen 5
S Shuffle String aus if-clause Allgemeine Java-Themen 11
Besset Variablen Ist String = "" + int inordnung? Allgemeine Java-Themen 6
M Map <Long, String> zu Map<String, Long> Allgemeine Java-Themen 9
I String Encoding Verständnisproblem Allgemeine Java-Themen 22
N Prüfen, ob ein String 2x das selbe Zeichen hat Allgemeine Java-Themen 10
SaftigMelo Bug Fixen von String-spliten Allgemeine Java-Themen 8
Monokuma String List nach Zahlen und Worten sortieren Allgemeine Java-Themen 9
Kingamadeus2000 Alle mehrfach vorkommenden Buchstaben rekursiv aus einem String entfernen. Allgemeine Java-Themen 6
YohnsonM String - Aufteilung und Nutzung einzelner Chars Allgemeine Java-Themen 7
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
S String umbenennen: wie? Allgemeine Java-Themen 4
x46 String Format Fehler Allgemeine Java-Themen 2
S ISO 8601 -> getter / setter String Allgemeine Java-Themen 3
L String zu repräsentativen Wert Allgemeine Java-Themen 0
H Array mit dem Datentype String[] initializieren Allgemeine Java-Themen 7
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
L regex ganzer string? Allgemeine Java-Themen 2
L Ist ein string ein erlaubter variabel name? Allgemeine Java-Themen 2
Z JNA Cpp-DLL String Verwendung Allgemeine Java-Themen 2
A String auf Zahlen überprüfen Allgemeine Java-Themen 5
N String Array Eingabe Allgemeine Java-Themen 6
MiMa Datum von String zu LocalDateTime Allgemeine Java-Themen 8
W String -> byte[] -> String - Sieht jemand was ich nicht sehe? Allgemeine Java-Themen 10
R char aus String entfernen Allgemeine Java-Themen 10
LimDul Mittels Streams aus Strings A B C den String A, B und C machen Allgemeine Java-Themen 12
M Programm erkennt String aus .txt Datei nicht Allgemeine Java-Themen 3
P einen public <Optinal String> in einer anderen Klasse mit einem Int vergleichen Allgemeine Java-Themen 2
S Ini Text aus String parsen Allgemeine Java-Themen 1
T String-Manipulation beim Ablauf in Eclipse und als JAR-File Allgemeine Java-Themen 8
M String lässt sich nicht Zusammenfügen Allgemeine Java-Themen 10
Drachenbauer Wie kann ich das Wort "concrete" in einem String durch ein anderes Wort ersetzen lassen? Allgemeine Java-Themen 5
R Schlüsselworte "Throw new exception" gibt nicht den String als Fehlermeldung aus Allgemeine Java-Themen 2
R Variablen String mit split-Funktion aufteilen Allgemeine Java-Themen 7
F Datei in String-Array einlesen Allgemeine Java-Themen 8
S Marker aus String ermitteln Allgemeine Java-Themen 5
T Objekt mit String und Int aus TxT Datei erstellen Allgemeine Java-Themen 23
M Bei String.format ein Komma statt einem Punkt ausgeben lassen Allgemeine Java-Themen 1
S MSSQL Exception & Connection String Allgemeine Java-Themen 19
B Bei Email: FW / AW... - Hilfe bei String suche Allgemeine Java-Themen 21
J String - Vergleiche Allgemeine Java-Themen 7
K Aus String zwei Jahreszahlen auslesen Allgemeine Java-Themen 18
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
G CSV in String Allgemeine Java-Themen 7
P String-Verschlüsselung - Frage zur Sicherheit Allgemeine Java-Themen 21
K Methodenaufruf mit String / String zu Objekt konvertieren Allgemeine Java-Themen 8
D Erste Schritte Fehler mit negativen und 0 Zahlen im String Allgemeine Java-Themen 6
Xge Replace x Zeichen aus String Allgemeine Java-Themen 2
coolian warum bekomme ich ein string index out of bounds exception Allgemeine Java-Themen 17
F In String 2 Buchstaben vertauschen Allgemeine Java-Themen 2
J Class Decompile als String (Procyon) Allgemeine Java-Themen 2
I Datentypen String in class sicher verwahren Allgemeine Java-Themen 17
J Falls der String ein "X" beinhaltet Allgemeine Java-Themen 2
T String mehrere Worte Allgemeine Java-Themen 2
D String Groß-/Kleinschreibung Allgemeine Java-Themen 2
D String und Klassenvariable Allgemeine Java-Themen 6
Aruetiise Funktion(y = mx+n) in String speichern und berechnen Allgemeine Java-Themen 9
C String in Objektnamen umwandeln Allgemeine Java-Themen 3
E Variablen Aus .txt ausgelesener string mit if() überprüfen? Allgemeine Java-Themen 2
L String-Schema-Aufspaltung Allgemeine Java-Themen 2
E String in Zahl umwandeln, ohne Befehl Integer.parseInt Allgemeine Java-Themen 3
L String splitten und multiplizeren Allgemeine Java-Themen 10
G String mit umbekannter länge splitten. Allgemeine Java-Themen 2
S Einzigartigen String in Datenbank finden und löschen Allgemeine Java-Themen 23
A Byte zu String Allgemeine Java-Themen 4
B Von String zu <Objekt> ||Speichern/Laden Allgemeine Java-Themen 17
T Komplexitätsoptimierung String vergleich Allgemeine Java-Themen 4
heinz ketchup String im JLabel ausgeben und erneuern Allgemeine Java-Themen 6
S Input/Output Beste Möglichkeit einen String in einen Datei zu Schreiben Allgemeine Java-Themen 2
V Eingegeben String Splitten und in Integer umwandeln Allgemeine Java-Themen 2
L Decrypt String Allgemeine Java-Themen 1
X Variablen AtmicLong größer als String ? Allgemeine Java-Themen 4
S String literal und Referenzvariablen Allgemeine Java-Themen 6
J Datentypen Absätze mit String im Word Dokument Allgemeine Java-Themen 3
D "Paste" String doppelt Allgemeine Java-Themen 14
E String Frage Allgemeine Java-Themen 9
T String aus While Schleife für ganze Klasse sichtbar machen Allgemeine Java-Themen 5
D JSON to String Allgemeine Java-Themen 31
M String automatisch in nächste Zeile umbrechen (Graphics) Allgemeine Java-Themen 6
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
T Swing Font String Pixellänge Allgemeine Java-Themen 1
G Substrings in einen String zusammenfassen Allgemeine Java-Themen 5
Tommy Nightmare String.replaceAll(...) fehlerhaft? Allgemeine Java-Themen 3
L String auf zahlenwert prüfen Allgemeine Java-Themen 13
U OOP Warum kann ich aus meiner Methode keinen String auslesen Allgemeine Java-Themen 4
L 2-Dimensionaler String: Zahlen verschieben Allgemeine Java-Themen 10

Ähnliche Java Themen

Neue Themen


Oben