Tabulatorverhalten OpenJDK 11

Ich habe eine JTextArea in der ich mittels Tabulatortaste Texte „tabellarisch“ anordne. In Java8 und OpenJDK8 funktioniert das alles.

Ich drücke 1x Tabulator und der Cursor springt zu Spalte 20 in der JTextArea. Drücke ich 2x Tabulator springt der Cursor zu Spalte 40.

Bei OpenJDK 11 ist es jetzt so, dass beim Drücken der Tabulatortaste der Cursor eine feste Anzahl an Leerzeichen weiterspringt. Damit kann ich die Texte nicht mehr „tabellarisch“ anordnen. Nur wenn ich Leerzeichen verwende.

Kann man dieses Tabulatorverhalten irgendwo konfigurieren?

Bei einem schnellen Reinzoomen landet man bei https://github.com/AdoptOpenJDK/openjdk-jdk11/blob/999dbd4192d0f819cb5224f26e9e7fa75ca6f289/src/java.desktop/share/classes/javax/swing/text/DefaultEditorKit.java#L1023 , was aussieht, als würde da wirklich ein TAB eingefügt - aber es ist kompliziert: Kann gut sein, dass da das Look-And-Feel oder sonstwas sich noch irgendwo einklinkt, und was verändert.

Nur um sicher zu sein:

Wenn du EIN mal TAB drückst, musst du danach ACHT mal „Backspace“ drücken, um den alten Zustand herzustellen? (Also: Er fügt wirklich echte Leerzeichen ein? Oder wird es einfach nur ~„falsch eingerückt angezeigt“?)

Hallo, nein, ich habe mich falsch ausgedrückt.

Es wird schon ein Tabulator eingefügt und keine Leerzeichen. Aber irgendwie wird es falsch eingerückt.

Ok, dann ist das irgendeine Rendering-Sache… da müßte man mal genauer schauen (hab’ das OpenJDK 11 gerade nicht zur Hand, deswegen kann ich da gerade nicht „ad hoc“ was machen). Ein paar weitere relevante Details:

  • Setzt du eine bestimmte Schriftart? (Funktioniert es z.B., wenn man einen "Monospaced" Font hat?)
  • Machst irgendwelchen kranken shyce mit Arabischen Zeichen („Right-To-Left“) oder sonstigen Unicode-Besonderheiten?
  • Hängt der Unterschied wirklich nur davon ab, ob es mit der OpenJDK8- oder der OpenJDK11-VM ausgeführt wird (unabhängig vom compilieren)?

Ich habe mir OpenJDK13 von adoptOpenJDK.net heruntergeladen. Unter Eclipse steht bei mir jetzt unter:

Installed JREs:

java-8-oracle
und jdk-13.0.2+8

Wenn ich das Programm mit jdk-13.0.2+8 (OpenJDK13) laufen lasse funktioniert es nicht.

Schalte ich auf java-8-oracle um, funktioniert es wieder.

Ich muss am Programm gar nichts ändern. Nur das Umschalten der JREs verursacht das Problem.

Ich habe auch verschiedene LookAndFeels bzw. Themes ausprobiert. Keine Änderung.

Gut dass ich das nicht schon in meinem ersten und jetzt bereits gelöschten Posting erwähnt hatte…

Die Frage ist, ob es nach dem Umschalten vor dem Testen auf die geänderte VM neu kompiliert wird… Die Frage ist also… Funktionieren der Bytecode der VM8 auf der VM13 wie auf der VM8 oder so, als wenn das Programm als VM13 auf der VM13 läuft. Damit kann man testen, ob es an der VM oder am Kompiler liegt. Verstehst du, worauf ich hinaus will?

Ich verwende wie gesagt Eclipse. Ich habe unter Projekt - Build Automatically aktiviert. Wird dadurch nicht automatisch das Projekt neu kompiliert?

Ich starte das Programm im Moment über Eclipse: Run - Run As - Java Application. Dort wird doch auch das Programm vor dem Start neu kompiliert, oder?

Also, du musst professionell vorgehen, d. h., jeder einzelne Schritt muss reproduzierbar sein, d. h., am einfachsten wäre es, es einmal manuell mit dem JDK8 zu kompilieren und es dann einmal mit j8 und j13(?) zu starten, danach das gleiche noch mal mit dem JDK13(?)…

Nah, da muss man mal schauen, ob man durch Draufschauen auf den Code einen Hinweis auf das Problem (und eine mögliche Lösung) erkennt, oder ggf. irgenwelche Debug-Hilfen basteln. Im wesentlichen ist es ja, wenn ich das richtig verstanden habe, so, dass ein „TAB“ beim neueren JDK nicht richtig eingerückt angezeigt wird. Vielleicht findet man da was…