Discussion:
JCheckboxen mit Zeilenumbruch?
(zu alt für eine Antwort)
Wolfgang Uhr
2005-10-31 09:33:33 UTC
Permalink
Hallo

Ich habe ein paar Checkboxen, die ich in einem grid-layout untereinander
anordne. Nun ist in bestimmten Fällen der Text einfach zu lang und wird
derzeit einfach abgebrochen. Und Eigenschaften wie lineWrap und wordWrap
- JTextArea - finde ich bei der JCheckbox nicht. Und eine Möglichkeit,
dem Ding einen eigenen Renderer zuzuordnen sehe ich auch keine.

Hat einer eine Idee?

Vielen Dank für jede Hilfe

Wolfgang
--
In der Newsgroupmailadresse sind nur plain-text-Mails freigeschaltet.
http://applikationssoftware.de/
Michael Hüttermann
2005-10-31 09:47:04 UTC
Permalink
Du kannst der Checkbox ein eigenes UI zuweisen.

Gruss

Michael
Wolfgang Uhr
2005-10-31 10:33:46 UTC
Permalink
Hallo
Post by Michael Hüttermann
Du kannst der Checkbox ein eigenes UI zuweisen.
Danke das ist schön zu wissen. Allerdings:

Ich würde nun mit dieser Antwort eine Klasse "User_Interface" oder
ähnlich schreiben wollen. Und diese muss eine Schnittstelle bedienen,
die "irgendwie" aussieht.

Bisher lande ich bei allen Manuals im leeren oder auf der in dieser
Beziehung wenig hilfreichen Seite
http://java.sun.com/docs/books/tutorial/uiswing/components/button.html

oder aber ich kann auch eine Zeile konstruieren wie:

jCheckBox.setUI(jButton.getUI());

Die Zeile "funktioniert" sogar und das "Kästchen" der Checkbox ist weg.
Aber javax/swing/JButton.java hat keine getUI-Funktion und
AbstractButton auch nicht. Wie kommt man nun an ein Beispiel dass einem
erklärt, was zu tun ist?

Herzliche Grüße
Wolfgang
--
In der Newsgroupmailadresse sind nur plain-text-Mails freigeschaltet.
http://applikationssoftware.de/
Stefan Matthias Aust
2005-10-31 10:50:03 UTC
Permalink
Notlösung ist ein HTML-Label zu benutzen. Zwingst du dann die
JCheckbox in eine bestimmte Breite, bricht der Label um. Setze dann
verticalTextPosition auf top, um den Check-Button nicht mehr vertikal
zu zentrieren - was selten dem entspricht, was man haben möchte.
Wolfgang Uhr
2005-10-31 11:33:31 UTC
Permalink
Post by Stefan Matthias Aust
Notlösung ist ein HTML-Label zu benutzen. Zwingst du dann die
JCheckbox in eine bestimmte Breite, bricht der Label um. Setze dann
verticalTextPosition auf top, um den Check-Button nicht mehr vertikal
zu zentrieren - was selten dem entspricht, was man haben möchte.
Vielen Dank, ich habe einen anderen Ansatz mal probiert und der sieht so
aus:

Checkbox und Textarea in eigener JPanel-Klasse - Checkbox nach West und
Textarea nach Center.

Diese MultiLineCheckBox lässt sich dann in ein VerticalFlowLayout
beliebig oft einfügen. Sieht sehr gut aus.

Herzliche Grüße
Wolfgang
--
In der Newsgroupmailadresse sind nur plain-text-Mails freigeschaltet.
http://applikationssoftware.de/
Uwe Weiss
2005-10-31 19:49:14 UTC
Permalink
Post by Wolfgang Uhr
Vielen Dank, ich habe einen anderen Ansatz mal probiert und der sieht so
Checkbox und Textarea in eigener JPanel-Klasse - Checkbox nach West und
Textarea nach Center.
Diese MultiLineCheckBox lässt sich dann in ein VerticalFlowLayout
beliebig oft einfügen. Sieht sehr gut aus.
Hi Wolfgang,

imho (umbesehen) verhält sich diese "Checkbox" aber nicht immer so, wie
man es erwarten würde, oder? Und zwar bzgl.
- Fokus-Rahmen um Box & Label
- Mouseclick auf das Label verändert Status der Checkbox?

Ich denke, der Ansatz, ein eigenes UI zu bauen, führt eher zum Ziel.
Wenn Du mit Deiner Lösung zufrieden bist, isses aber ok!

Gruß

-Uwe-
Uwe Weiss
2005-10-31 19:59:47 UTC
Permalink
Post by Uwe Weiss
Post by Wolfgang Uhr
Vielen Dank, ich habe einen anderen Ansatz mal probiert und der sieht so
Checkbox und Textarea in eigener JPanel-Klasse - Checkbox nach West und
Textarea nach Center.
Diese MultiLineCheckBox lässt sich dann in ein VerticalFlowLayout
beliebig oft einfügen. Sieht sehr gut aus.
Hi Wolfgang,
imho (umbesehen) verhält sich diese "Checkbox" aber nicht immer so, wie
man es erwarten würde, oder? Und zwar bzgl.
- Fokus-Rahmen um Box & Label
- Mouseclick auf das Label verändert Status der Checkbox?
Ich denke, der Ansatz, ein eigenes UI zu bauen, führt eher zum Ziel.
Wenn Du mit Deiner Lösung zufrieden bist, isses aber ok!
Gruß
-Uwe-
Tja, richtig geraten! Hätte ich mal erst den Thread komplett gelesen,
und dann geantwortet, dann hätte ich nicht orakeln müssen ;)

Aber Wolfgangs Beitrag von 14:00 bestätigt Schnellschuss-1 (Fokus).
Das mit dem Mouse-Click wird wohl auch stimmen...

Also: eigene Checkbox-Klasse, eigene CheckBox-UI-Klasse, beide Klassen
beim UIManager miteinander verheiraten.
Den Rest überlasse ich dem interessierten Leser als Übung ;)

(Nee, sorry! Nicht aus Arroganz, sondern aus Unsicherheit: kann ich auch
nicht aus dem Ärmel schütteln)

-Uwe-
Michael Hüttermann
2005-10-31 20:15:32 UTC
Permalink
Hi Uwe!

Tja richtig geraten. Soweit sind wir auch schon, lies doch ruhig den
Thread weiter ..... :-)

Michael
Wolfgang Uhr
2005-11-01 07:48:58 UTC
Permalink
Hallo
Post by Uwe Weiss
imho (umbesehen) verhält sich diese "Checkbox" aber nicht immer so, wie
man es erwarten würde, oder? Und zwar bzgl.
Schon klar
Post by Uwe Weiss
- Mouseclick auf das Label verändert Status der Checkbox?
solved ...
Post by Uwe Weiss
- Fokus-Rahmen um Box & Label
zu 50% gelöst - der Rahmen ist da, es ist nur der Falsche!
Er sieht aber ähnlich genug aus ...
Post by Uwe Weiss
Ich denke, der Ansatz, ein eigenes UI zu bauen, führt eher zum Ziel.
Wenn Du mit Deiner Lösung zufrieden bist, isses aber ok!
Diese Aussage gibt mir Rätsel auf. Unter UI verstehe ich "User
Interface". Und ich habe m.E. ein eigens UI erstellt (unter VB hätte man
das Ding Benutzersteuerelement genannt).

Aus deiner Aussage aber entnehme ich, dass ein eigens UI etwas anders
sein soll als das was ich erstellt habe?

Herzliche Grüße
Wolfgang
--
In der Newsgroupmailadresse sind nur plain-text-Mails freigeschaltet.
http://applikationssoftware.de/
Karsten Lentzsch
2005-10-31 11:15:32 UTC
Permalink
Post by Wolfgang Uhr
Ich habe ein paar Checkboxen, die ich in einem grid-layout untereinander
anordne. Nun ist in bestimmten Fällen der Text einfach zu lang und wird
derzeit einfach abgebrochen. Und Eigenschaften wie lineWrap und wordWrap
- JTextArea - finde ich bei der JCheckbox nicht. Und eine Möglichkeit,
dem Ding einen eigenen Renderer zuzuordnen sehe ich auch keine.
Hat einer eine Idee?
Stefan hat ja die Notlösung schon beschrieben.
Wenn möglich, schreibe kürzer - das geht meist.

- Karsten
Wolfgang Uhr
2005-10-31 11:34:21 UTC
Permalink
Post by Karsten Lentzsch
Wenn möglich, schreibe kürzer - das geht meist.
Ausnahme: Der Kunde will was reinschreiben können ...
--
In der Newsgroupmailadresse sind nur plain-text-Mails freigeschaltet.
http://applikationssoftware.de/
Michael Hüttermann
2005-10-31 12:25:53 UTC
Permalink
mit dem HTML-Notlösung Workaround hast Du allerdings das Problem dass
sich nicht editierbare Ausprägungen ggf. nicht so verhalten wie Du es
erwartest.

Den Text kürzer schreiben ist natürlich auch eine Idee. :-) Geht
allerdings leider nicht immer.

Wolfgang, ich habe ein RFE an SUN gestellt, die in diese Richtung geht.
Schau mal drauf vielleicht inspiriert Dich das:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6289684

Gruss

Michael
Wolfgang Uhr
2005-10-31 13:00:57 UTC
Permalink
Hallo Michael
Post by Michael Hüttermann
Wolfgang, ich habe ein RFE an SUN gestellt, die in diese Richtung geht.
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6289684
Vielen Dank aber ich habe mir aus Checkbox und Textarea nun ein eigenes
Benutzerkontrol gemacht. Mein derzeitiges Problem ist:

Wenn die Checkbox den Focus hat, dann hat sie - bei mir - einen
gestrichelten Rand. Und diesen Rand möchte ich nun der Textarea zuweisen.

Meine Frage ist: Wie komme ich an den Bordern, den eine aktivierte
Checkbox hat?

Herzliche Grüße
Wolfgang
--
In der Newsgroupmailadresse sind nur plain-text-Mails freigeschaltet.
http://applikationssoftware.de/
Michael Hüttermann
2005-10-31 13:24:36 UTC
Permalink
Aktivierte CheckBox? Du meinst focussierte CheckBox denk ich!?

Da musst Du (leider) eine von AbstractBorder abgeleitete Border
erzeugen und diese Deiner Komponente zuweisen. So habe ich es bei der
CheckBox gemacht.

Interessehalber würde mich interessieren: was hast Du denn genau
gemacht? Was meinst Du mit UserControl aus TextArea und CheckBox?

Michael
Wolfgang Uhr
2005-10-31 13:30:48 UTC
Permalink
Post by Michael Hüttermann
Aktivierte CheckBox? Du meinst focussierte CheckBox denk ich!?
Ok - focussiert ..
Post by Michael Hüttermann
Da musst Du (leider) eine von AbstractBorder abgeleitete Border
erzeugen und diese Deiner Komponente zuweisen. So habe ich es bei der
CheckBox gemacht.
Es müssten aber irgendwo Systemborder rumirren. Also in VB gibt es die.
Post by Michael Hüttermann
Interessehalber würde mich interessieren: was hast Du denn genau
gemacht? Was meinst Du mit UserControl aus TextArea und CheckBox?
Da muss man soviel Code posten und das wollte ich vermeiden.

Ich setze eine Checkbox und eine Textarea eine eigene Klasse:

public class CMultiLineCheckBox
extends JPanel implements FocusListener
{
BorderLayout layoutThisBrd = new BorderLayout();
JCheckBox jCheckBox = new JCheckBox();
JTextArea jTextArea = new JTextArea();
JLabel jLabel = new JLabel();

public CMultiLineCheckBox()
{
this.setLayout(layoutThisBrd);
CMPSCommonSettings.setLabelParameters(jLabel);
jTextArea.setFont(jLabel.getFont());
jTextArea.setBackground(jLabel.getBackground());

// Einstellungskram - mehrzeilig usw.

this.add(jCheckBox, java.awt.BorderLayout.WEST);
this.add(jTextArea, java.awt.BorderLayout.CENTER);

jCheckBox.setHorizontalAlignment(JLabel.CENTER);
jCheckBox.setVerticalAlignment(JLabel.TOP);

jCheckBox.addFocusListener(this);
}

/** Die Checkbox bekommt den Focus und die Textarea muss den
* Rand anzeigen.
*/
public void focusGained(FocusEvent e)
{
// so gehts leider nicht!
jTextArea.setBorder(jCheckBox.getBorder());
}

/** Der Rand der Textarea wird gelöscht wenn die Textbox den
* Focus verliert
*/
public void focusLost(FocusEvent e)
{
jTextArea.setBorder(BorderFactory.createEmptyBorder());
}
}

Und davon dann n Stück in ein JPanel mit VerticalFlowLayout

Herzliche Grüße
Wolfgang
--
In der Newsgroupmailadresse sind nur plain-text-Mails freigeschaltet.
http://applikationssoftware.de/
Michael Hüttermann
2005-10-31 17:43:50 UTC
Permalink
ach so. hmmmm.

ja, es gibt auch vordefinierte border.
Wolfgang Uhr
2005-10-31 17:59:41 UTC
Permalink
Post by Michael Hüttermann
ach so. hmmmm.
ja, es gibt auch vordefinierte border.
Das ist mir klar - die Frage ist wo?
--
In der Newsgroupmailadresse sind nur plain-text-Mails freigeschaltet.
http://applikationssoftware.de/
Michael Hüttermann
2005-10-31 18:15:41 UTC
Permalink
BorderFactory, nutzt Du doch in Deinem Code.
Wolfgang Uhr
2005-10-31 18:43:28 UTC
Permalink
Post by Michael Hüttermann
BorderFactory, nutzt Du doch in Deinem Code.
Also ich spreche es mal in VB aus. Es gibt in Visual-Basic die
Konstanten vbActiveTitleBar und vbInactiveTitleBar. Das sind Werte die
eine Systemfarbe repräsentieren. Wenn ich sage
button.backColor = vbActiveTitleBar
dann nimmet der Button die gleiche Hintergrundfarbe an wie der TitleBar
eines aktivierten Fensters und zwar unabhängig davon, welches Theme ich
gerade gewählt habe.

Und nun möchte ich in Java der JTextarea den gleichen Rahmen zuordnen,
den ich bei einer JCheckbox erhalte, die gerade den Focus hat.

Das bedeutet: Es macht keinen Sinn, mir ein Border zu basteln, dass mit
dem übereinstimmt, dass ich auf meinem Rechner sehe. Ich muss mir von
einer Checkbox den jeweils aktuellen Systemborder kopieren und den der
Textarea zuordnen.

Ich brauche sowas wie: jCheckBox.getFocusBorder()
--
In der Newsgroupmailadresse sind nur plain-text-Mails freigeschaltet.
http://applikationssoftware.de/
Michael Hüttermann
2005-10-31 19:43:23 UTC
Permalink
ja, ich verstehe was Du suchst.

Wenn Du in das API schaust, was Du sicherlich gemacht hast :-), wirst
Du feststellen, dass kein checkbox.getFocusBorder() oder ähnliches
existiert. Du kannst über den UIManager diverse globale settings
beauskunften, da ist aber auch nichts bei was Dir hier weiterhilft.

Wie gesagt, meine Lösung sah so aus dass ich eine eigene Border
erzeugt habe (von AbstractBorder abgeleitet) und diese der Komponente
situativ zuweise. Das könntest Du genauso machen. Meine Border sieht
genauso aus wie die Standard-Focus-Border, ist sie natürlich leider
nicht (Stichwort system border).

Vielleicht nicht genau das was Du suchst, führt aber zum Ziel und ist
funktional identisch.
Wolfgang Uhr
2005-11-02 07:22:38 UTC
Permalink
Hallo
Post by Michael Hüttermann
ja, ich verstehe was Du suchst.
Wenn Du in das API schaust, was Du sicherlich gemacht hast :-), wirst
Du feststellen, dass kein checkbox.getFocusBorder() oder ähnliches
existiert. Du kannst über den UIManager diverse globale settings
beauskunften, da ist aber auch nichts bei was Dir hier weiterhilft.
Wie gesagt, meine Lösung sah so aus dass ich eine eigene Border
erzeugt habe (von AbstractBorder abgeleitet) und diese der Komponente
situativ zuweise. Das könntest Du genauso machen. Meine Border sieht
genauso aus wie die Standard-Focus-Border, ist sie natürlich leider
nicht (Stichwort system border).
Also inzwischen bin ich der Sache etwas mehr auf den Grund gegangen -
auch mit dem Beitrag auf den Wolfgang Zitzelsberger
http://java.sun.com/developer/onlineTraining/GUI/Swing2/ verlinkt hat -
und komme zunehmend zu dem Schluss dass dieser von dir vorgeschlagene
Weg wohl der einzige ist.

Wenn man die Routinen nach unten durchgeht, dann findet man irgendwann
die JComponent.paint-Methoden und die haben den Parameter hasFocus.
Damit gibt es keinen Focus-Border sondern ein Verhalten des Controls für
den Fall, dass es den Focus hat. Das ist im Grunde genommen auch
logisch, denn man könnte ja den Focus in irgend einem
Star-War-Look-And-Feel auch dadurch anzeigen wollen, dass man die
Schriftzeichen des Controls durch Zeichen aus dem Symbol-Font ersetzt
(um mal einen Extremfall zu nennen).

Das bedeutet natürlich andersrum wieder dass die Entwicklung eigener
Controls zumindest dann aufwendig wird, wenn man unterschiedliche
Look-And-Feels supporten will bwz. wenn man hier wenigestens bei jedem
Look-And-Feel ein brauchbares Kontrol haben möchte.

Herzliche Grüße
Wolfgang
--
In der Newsgroupmailadresse sind nur plain-text-Mails freigeschaltet.
http://applikationssoftware.de/
Wolfgang Zitzelsberger
2005-11-02 08:25:45 UTC
Permalink
Post by Wolfgang Uhr
Das bedeutet natürlich andersrum wieder dass die Entwicklung eigener
Controls zumindest dann aufwendig wird, wenn man unterschiedliche
Look-And-Feels supporten will bwz. wenn man hier wenigestens bei jedem
Look-And-Feel ein brauchbares Kontrol haben möchte.
Warum verwendest du nicht Stefans Vorschlag? Einfacher geht es wirklich
nicht als seinen Text mit Html-Tags zu versehen
(<html>CheckBoxText</html>). Dann klappt es auch mit allen Look and Feels.

Grüße,
Wolfgang
--
www.javasoft.de
Wolfgang Uhr
2005-11-02 09:15:32 UTC
Permalink
Post by Wolfgang Zitzelsberger
Warum verwendest du nicht Stefans Vorschlag? Einfacher geht es wirklich
nicht als seinen Text mit Html-Tags zu versehen
(<html>CheckBoxText</html>). Dann klappt es auch mit allen Look and Feels.
Nun das eine Control ist fertig und bei dem anderen habe ich vor dem
Problem gestanden, dass ich den Zeilenumbruch selbst reindröseln muss
mit <br /> oder ähnlich. Und dafür musste ich mit Textbreite usw. selbst
rumrechnen.

Und bei der JTextBox sind es nur zwei Flags gewesen.

Und das Look-And-Feel ist meinem Kunden völlig egal. Das Programm wird
irgendwo in der Verwaltung eingesetzt und da kommt keiner auf die Idee
am Aussehen etwas rumzudröseln um den langweiligen Alltag
abwechslungsreicher zu gestalten. Der wird das Look-And-Feel-Problem gar
nicht zur Kenntniss nehmen.

Für mich ist das Problem abgeschlossen - weil es funktioniert und der
Kunde die Lösung in jedem Fall akzeptieren wird (auch wenn es vom
Standpunkt der Java-Gemeinde nur eine halbe Lösung ist) - ich habe nur
festgestellt, dass es wohl etwas aufwendiger ist, wenn man Controls
braucht, die alle Look-And-Feels supporten.

Übrigens halte ich es für keine gute Idee einen html-Edtor anzuwerfen um
den Text einer Checkbox darzustellen. Nach meinem Gefühl ist das ja wohl
die Ressourcenschleuder 1. Wahl. Die Rechner werden zwar immer größer
und Leistungsfähiger aber man muss ja nicht immer alles nur für sich
beanspruchen, oder?

Herzliche Grüße
Wolfgang
--
In der Newsgroupmailadresse sind nur plain-text-Mails freigeschaltet.
http://applikationssoftware.de/
Wolfgang Zitzelsberger
2005-11-02 09:27:56 UTC
Permalink
Post by Wolfgang Uhr
Nun das eine Control ist fertig und bei dem anderen habe ich vor dem
Problem gestanden, dass ich den Zeilenumbruch selbst reindröseln muss
mit <br /> oder ähnlich. Und dafür musste ich mit Textbreite usw. selbst
rumrechnen.
Ich glaube das war wohl ein Mißverständnis - ab Java 1.4 wird der
Zeilenumbruch automatisch vorgenommen. Du musst da keine Zeilenumbrüche
manuell einfügen.

Ab Java 1.5 sehe ich keine Verzögerungen mehr bei Verwendung der
HTML-Tags. Vorher wurde immer etwas Zeit für das erste zu bauende Objekt
beansprucht.

Grüße,
Wolfgang
--
www.javasoft.de
Michael Hüttermann
2005-11-02 10:17:13 UTC
Permalink
Hi Wolfgang!

Frage zum Verständnis: welcher Zeilenumbruch wird wann genau
automatisch vorgenommen.

Das mit dem HTML ist so eine Sache. Wie bereits angesprochen geht die
Kontrolle flöten. Z.B. wenn die Komponente disabled ist.
Wolfgang Zitzelsberger
2005-11-02 10:25:57 UTC
Permalink
Post by Michael Hüttermann
Hi Wolfgang!
Frage zum Verständnis: welcher Zeilenumbruch wird wann genau
automatisch vorgenommen.
Das mit dem HTML ist so eine Sache. Wie bereits angesprochen geht die
Kontrolle flöten. Z.B. wenn die Komponente disabled ist.
Wenn die vorhandene Breite nicht ausreicht den Text in einer Zeile
darzustellen (abhängig vom LayoutManager), wird dieser automatisch in
mehreren Zeilen dargestellt - wie mann es eben von HTML her gewohnt ist.
Das wurde irgendwann mit Java 1.4 eingeführt - die genaue Version weiß
ich nicht.

Grüße,
Wolfgang
--
www.javasoft.de
Michael Hüttermann
2005-11-02 11:46:13 UTC
Permalink
ach so LayoutManager. Ja das ist klar.
Wolfgang Uhr
2005-11-02 12:27:34 UTC
Permalink
Post by Wolfgang Zitzelsberger
Wenn die vorhandene Breite nicht ausreicht den Text in einer Zeile
darzustellen (abhängig vom LayoutManager), wird dieser automatisch in
mehreren Zeilen dargestellt - wie mann es eben von HTML her gewohnt ist.
Das wurde irgendwann mit Java 1.4 eingeführt - die genaue Version weiß
ich nicht.
Also um die Sache zum Abschluss zu bringen. Ich habe es mal mit HTML
ausprobiert und bin nun *sehr froh* das ich es doch anders gemacht habe.

Ich arbeite mit JBuilder und Java 1.4.2 und es sieht scheußlich aus.

Herzliche Grüße
Wolfgang
--
In der Newsgroupmailadresse sind nur plain-text-Mails freigeschaltet.
http://applikationssoftware.de/
Stefan Matthias Aust
2005-11-02 09:55:06 UTC
Permalink
Post by Wolfgang Uhr
Übrigens halte ich es für keine gute Idee einen html-Edtor anzuwerfen um
den Text einer Checkbox darzustellen. Nach meinem Gefühl ist das ja wohl
die Ressourcenschleuder 1. Wahl. Die Rechner werden zwar immer größer
und Leistungsfähiger aber man muss ja nicht immer alles nur für sich
beanspruchen, oder?
Ein JTextArea stattdessen zu benutzen ist mit Abstand aufwendiger als
den HTML-Renderer anzuwerfen...
--
Stefan Matthias Aust // Ergo bibamus, ne sitiamus, vas repleamus!
Wolfgang Uhr
2005-11-02 10:16:19 UTC
Permalink
Post by Stefan Matthias Aust
Ein JTextArea stattdessen zu benutzen ist mit Abstand aufwendiger als
den HTML-Renderer anzuwerfen...
Das ist natürlich dann ein Eigentor gewesen.

Wieso ist dann der HTML-Renderer eine "Notlösung"?
--
In der Newsgroupmailadresse sind nur plain-text-Mails freigeschaltet.
http://applikationssoftware.de/
Michael Hüttermann
2005-11-02 10:22:08 UTC
Permalink
Lieber Wolfgang. Gerade vor 3 Minuten bin ich auf diesen Punkt gerne
auch zum 7 mal erneut eingegangen.
Stefan Matthias Aust
2005-11-02 19:09:42 UTC
Permalink
Post by Wolfgang Uhr
Post by Stefan Matthias Aust
Ein JTextArea stattdessen zu benutzen ist mit Abstand aufwendiger als
den HTML-Renderer anzuwerfen...
Das ist natürlich dann ein Eigentor gewesen.
Wieso ist dann der HTML-Renderer eine "Notlösung"?
Der Font ist je nach Java-Version und LAF nicht exakt gleich zu dem, der
auch für normale Labels genutzt wird. Weiterhin ist die preferred width
einer solchen Komponente immer die Breite des einzeiligen Texts, was dir
die meisten Layouts zerreist (z.B. das JGoodies-Layout vor einem Jahr).
Ich musste in einem Projekt mit eingen Klimmzügen und reflections
tricksen, um die preferred size derart zu überschreiben, dass ich die
maximalbreite vorgeben kann und daraus dann die Anzahl der Zeilen und
die zugehörige preferred height zu berechnen.
--
Stefan Matthias Aust // Ergo bibamus, ne sitiamus, vas repleamus!
Wolfgang Uhr
2005-11-03 07:50:25 UTC
Permalink
Post by Stefan Matthias Aust
Der Font ist je nach Java-Version und LAF nicht exakt gleich zu dem, der
auch für normale Labels genutzt wird. Weiterhin ...
Ich hatte es selbst mal mit einer html-Checkbox versucht und dann auch
gesehen. Du hast recht. Es *ist* eine Notlösung. Da gefällt mir meine
*deutlich* besser

Danke
Wolfgang
--
In der Newsgroupmailadresse sind nur plain-text-Mails freigeschaltet.
http://applikationssoftware.de/
Michael Hüttermann
2005-11-03 10:48:37 UTC
Permalink
du kannst die schrift auch mit html-bordmitteln setzen. dann musst du
dir aber auch noch über die schriftgrösse gedanken machen. dieses
vorgehen ist in der tat alles andere als recommended. ausserdem geht es
hier um java client application und nicht web application. wie ich es
beschrieben habe, ein neues sauberes UI macht genau das was du brauchst.
Wolfgang Uhr
2005-11-03 12:23:11 UTC
Permalink
Post by Michael Hüttermann
du kannst die schrift auch mit html-bordmitteln setzen. dann musst du
dir aber auch noch über die schriftgrösse gedanken machen. dieses
vorgehen ist in der tat alles andere als recommended. ausserdem geht es
hier um java client application und nicht web application. wie ich es
beschrieben habe, ein neues sauberes UI macht genau das was du brauchst.
Also mit einem html-Text in der Checkbox habe ich einmal kein
durchgängiges Verhalten im Falle eines Focus. Die Checkbox zeigt keinen
Focusrand womit ich per Definition das gleiche Problem habe wie mit der
von mir favorisierten Lösung.

Nur: In meinem Ansatz habe ich das Problem bereits gelöst.

Weiter hat Stefan Matthias Aust noch ein paar andere Punkte genannt. So
überschreibt das html-Label die Umrandung eines panel-Borders in das
dieses Control eingefügt wurde.

Mit anderen Worten. Ich habe nur andere Probleme, wenn ich es anders
mache. Dann kann ich es aber auch so lassen wie ich es jetzt gemacht habe.

Wolfgang
--
In der Newsgroupmailadresse sind nur plain-text-Mails freigeschaltet.
http://applikationssoftware.de/
Michael Hüttermann
2005-11-03 12:48:36 UTC
Permalink
ja genau. schön dass ich dir durch meinen detaillierten
lösungsvorschlag helfen konnte.

Wolfgang Zitzelsberger
2005-11-01 09:35:19 UTC
Permalink
Post by Wolfgang Uhr
Und nun möchte ich in Java der JTextarea den gleichen Rahmen zuordnen,
den ich bei einer JCheckbox erhalte, die gerade den Focus hat.
Das ist allerdings vom Look & Feel abhängig. Bei Metal wird einfach nur
ein Rechteck mit der FocusColor gezeichnet. Die Farbe steht meist (je
nach LAF) über den UIManager zur Verfügung - muss aber nicht. Das wäre
die einfache Variante.

Wenn du ein eigenes UI für deine Checkbox baust, könntest du #paintFocus
überschreiben und #paintFocus der echten Checkbox aufrufen. Die Ausmaße
kannst du der Methode übergeben (protected void paintFocus(Graphics g,
Rectangle t, Dimension d)). Damit sollte der Focus dann unabhängig vom
LAF sein und immer stimmen.

Unter UI versteht man bei Swing meist eine Kombination aus View und
Controler. Kann nicht schaden, wenn man sich da ein bisschen schlau
macht. Zum Beispiel hier:
http://java.sun.com/developer/onlineTraining/GUI/Swing2

Schöne Grüße,
Wolfgang
--
www.javasoft.de
Loading...