Discussion:
[GUI - AWT/ SWING] Font durchgestrichen darstellen
(zu alt für eine Antwort)
Andre Teubner
2004-05-04 15:37:01 UTC
Permalink
Hallo zusammen,

ich suche nach einer Möglichkeit den Font in einem
JTextArea durchgestrichen darzustellen. Das JTextArea
dient als TableCellRenderer, daher verbietet sich
HTML (a' la <s>Text</s>) da es sonst zäh wie Kaugummi
läuft.

Mein letzter Kontakt mit so etwas war vor 2 Jahren mit
Syntaxhighlighting in eine JEditorPane. Nur das war ein
richtiger Aufriß, da man sich komplett an das Document hängen
und den Text mit Attributen ausstatten muß.

Mit der Hand drüberpinseln fällt auch aus, da der Text mehrzeilig
ist und ich will nicht mit Fontmetriken rumfrickeln, was ja zum
Schluss eh nicht richtig funktioniert.

Frage:

Wie kann ich in Java ohne viel Aufwand ein JTextArea mit
einen durchgestrichenen Font darstellen..?

vielen Dank im Voraus

Andre

PS: Ich habe schon gegoogelt (Groups/ Web) -> Viele Leute mit meinen
Problem gefunden -> Problemlösung -> Fehlanzeige
Stefan Matthias Aust
2004-05-04 18:10:14 UTC
Permalink
Post by Andre Teubner
ist und ich will nicht mit Fontmetriken rumfrickeln,
Wenn du nicht rumfrickeln - andere würden AWT-Programmieren sagen -
willst, dann geht es nicht. Durch/Unter/Überstrichenen Text musst du
selbst zeichnen.


bye
--
Stefan Matthias Aust // "Zweifel sind der Ansporn des Denkens..." -U
Andreas Jaeger
2004-05-04 19:29:55 UTC
Permalink
Post by Andre Teubner
Hallo zusammen,
ich suche nach einer Möglichkeit den Font in einem
JTextArea durchgestrichen darzustellen. Das JTextArea
dient als TableCellRenderer, daher verbietet sich
HTML (a' la <s>Text</s>) da es sonst zäh wie Kaugummi
läuft.
Wie groß ist denn die Tabelle? Ich habe spaßeshalber mal
ein kleines Testprogramm geschrieben. Das ist jetzt nicht
überragend schnell, aber immerhin funktioniert es einiger-
maßen auf meinem 1.5GHz Mobile P4.

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

public class Test {

public static void main(String[] args) {
Object[][] rowData = new Object[10][5000];
for (int i = 0; i < rowData.length; i++) {
for (int j = 0; j < rowData[i].length; j++) {
rowData[i][j] =
"<html><s>" +
"Ein schon beachtlich langer und komplexer<br>" +
"Text mit Pi, mit Pa und auch mit Po,<p>" +
"der beweisen soll, das man keine Angst vor<br>" +
"HTML in JLabel Swing Objekten haben muss" +
"</s></html>";
}
}
Object[] columnNames = new Object[10];
for (int i = 0; i < columnNames.length;) {
columnNames[i] = "Spalte " + (++i);
}
JTable table = new JTable(rowData, columnNames);
table.setRowHeight(50);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new JScrollPane(table),
BorderLayout.CENTER);
frame.pack();
frame.show();
}

}
--
---------------------------------------------
Andreas Jaeger
http://afi.uni-muenster.de
afi - Institut für Agrar- und Forstinformatik
an der Universität Münster
---------------------------------------------
Andre Teubner
2004-05-06 08:35:40 UTC
Permalink
Post by Andreas Jaeger
Wie groß ist denn die Tabelle? Ich habe spaßeshalber mal
ein kleines Testprogramm geschrieben. Das ist jetzt nicht
überragend schnell, aber immerhin funktioniert es einiger-
maßen auf meinem 1.5GHz Mobile P4.
Einigermaßen akzeptabel funktioniert es mit DefaultCellRenderer
bei mir auch. Ich habe aus Geschwindigkeitsgründen aber ein JTextArea
genommen,
da die Berechenung der PreferredSize wesentlich flotter von
statten geht als bei einen JLabel mit HTML...

Ich möchte erreichen das es sich flott anfühlt und nicht zäh wie
Kaugummi. Die Software ist direkt im Fronteinsatz. Da drücken den ganzen
Tag Krankenschwestern 'drauf rum'.


Irgendwie find ich das total peinlich von SUN. Alles haben die auf
Lightweight in Java 2 umgestellt. Fonts auch...Zu mindest was die
'Schnittstelle angeht'. --> Oh das OS [exotisches OS Ihrer Wahl] kann
keine durchgestrichenen Fonts rendern, hmmm dann fällt das Feature
halt weg...*grmml*

Wenn es nach mir gehen würde, so würde die Anwendung auf SWT umgestellt
werden. Ruhe im Karton. Nur bei < 250.000 Zeilen kann das etwas dauern...

Gruss
Andre
Andreas Jaeger
2004-05-06 08:52:18 UTC
Permalink
Post by Andre Teubner
Einigermaßen akzeptabel funktioniert es mit DefaultCellRenderer
bei mir auch. Ich habe aus Geschwindigkeitsgründen aber ein JTextArea
genommen,
da die Berechenung der PreferredSize wesentlich flotter von
statten geht als bei einen JLabel mit HTML...
Ich möchte erreichen das es sich flott anfühlt und nicht zäh wie
Kaugummi. Die Software ist direkt im Fronteinsatz. Da drücken den ganzen
Tag Krankenschwestern 'drauf rum'.
Also sag doch noch mal genau, was die Randdaten für die Tabelle
sind. Muß das Zeug editierbar sein können? Muß es unterschiedliche
Farben geben können, unterschiedliche Ausrichtung? Muß der
Zeilenumbruch der Zellen automatisch erfolgen, der Text scrollbar
sein? Wie genau soll die Tabelle aussehen?
Möglicherweise findet man dann ja eine akzeptabel schnelle Lösung,
und vielleicht ist die Handarbeit für das Textmalen auch nicht ganz
so schwierig und aufwendig.

Andreas
--
---------------------------------------------
Andreas Jaeger
http://afi.uni-muenster.de
afi - Institut für Agrar- und Forstinformatik
an der Universität Münster
---------------------------------------------
Andre Teubner
2004-05-08 08:26:25 UTC
Permalink
Post by Andreas Jaeger
Post by Andre Teubner
Einigermaßen akzeptabel funktioniert es mit DefaultCellRenderer
bei mir auch. Ich habe aus Geschwindigkeitsgründen aber ein JTextArea
genommen,
da die Berechenung der PreferredSize wesentlich flotter von
statten geht als bei einen JLabel mit HTML...
Ich möchte erreichen das es sich flott anfühlt und nicht zäh wie
Kaugummi. Die Software ist direkt im Fronteinsatz. Da drücken den
ganzen Tag Krankenschwestern 'drauf rum'.
Also sag doch noch mal genau, was die Randdaten für die Tabelle
sind. Muß das Zeug editierbar sein können?
Nein.
Post by Andreas Jaeger
Muß es unterschiedliche
Farben geben können, unterschiedliche Ausrichtung?
Nein.
Post by Andreas Jaeger
Muß der
Zeilenumbruch der Zellen automatisch erfolgen,
Ja und nein. Der Text sollte natürlich, wenn nötigt, auf
Zellenbreite umgebrochen werden. Die anschließende Höhenermittlung
der Zelle erfolgt, bei Datenänderung, automatisch. Was ja auch
alles funktioniert, nur gehts halt etwas lahm.

In deinem Codesnipp hattes du ja auch die Zellen höhe mit
/table.setRowHeight(50);/ fest eingestellt. In der Tabelle
die wir hier haben, kannjede Zelle eine andere Höhe haben.
Post by Andreas Jaeger
der Text scrollbar
sein?
Nein
Post by Andreas Jaeger
Wie genau soll die Tabelle aussehen?
Ganz normal. Wie eine simples Excelsheet mit aktivierten Zeilenumbruch
für die Zellen.
Post by Andreas Jaeger
Möglicherweise findet man dann ja eine akzeptabel schnelle Lösung,
und vielleicht ist die Handarbeit für das Textmalen auch nicht ganz
so schwierig und aufwendig.
Lieber keine 'Frickellösung'. Im Projekt ist zu wenig Zeit, um so etwas
runter zuschreiben und es später auch noch zu warten. Wenn es nicht mit
Bordmitteln möglich ist einen simplen Font durchgestrichen darzustellen
dann werde ich das lieber mit HTML lösen. Die PCs werden in Zukunft
schneller was für die HTML Lösung auf längere Sicht spricht, der
freihändisch implementiere Code für das draw der Komponente ist dagegen
eine Code Baustelle auf Ewigkeit.
Post by Andreas Jaeger
Andreas
Gruss
Andre

Lesen Sie weiter auf narkive:
Loading...