Einen Character in einem JLabel unterstreichen
-
Hi Leute!
Ich bin leider zu Java mit Swing genötigt worden und möchte einen
JLabel
haben, der mir den Buchstaben nach einem Amperstand ('&'
) unterstreicht. Ich weiß, dass es mit HTML-Code im Text funktionieren würde, will ich aber nicht.Ich habe ein
JCoolLabel
vonJLabel
abgeleitet, ihm einenboolean underlined_char
und einenint underlined_char_index
spendiert, diesetText( )
Methode überschrieben:public void setText( String text ) { underlined_char = false; underlined_char_index = -1; if( text.contains( "&" ) ) { underlined_char = true; underlined_char_index = text.indexOf( '&' ); String new_text = text.substring( 0, underlined_char_index ); new_text += text.substring( underlined_char_index + 1, text.length( ) ); text = new_text; } super.setText( text ); }
und möchte nun
public void paint( Graphics graphics ) { // super.paint( graphics ); if( underlined_char ) { // Some letter is to be underlined String text = getText( ); BasicGraphicsUtils.drawStringUnderlineCharAt( graphics, text, underlined_char_index, 0, getFontMetrics( getFont( ) ).getHeight( ) - 3 ); } }
Leider bin ich mit meiner Ausgabe - wie man sieht - 3 Pixel daneben. Warum? Weiß jemand, ob JLabel noch irgendwo Offsets bei der Textausgabe berücksichtigt?
Bin für jeden Tipp dankbar.
cheers, Swordfish
-
Du musst ein Masochist sein, wenn du das selber zeichnen willst...
JLabel.setDisplayedMnemonicIndex ist die Methode die dem JLabel sagt, welcher Buchstabe unterstrichen sein soll.
-
JBeni schrieb:
Du musst ein Masochist sein, wenn du das selber zeichnen willst...
Ich sagte nicht, dass ich es selber tun will, hab' nur auf die schnelle keine andere Möglichkeit gesehen, da ich im Internet nur auf die Lösung mit HTML Code gestoßen bin. Die zweite "gängige" Lösung war eben das selberzeichnen. Ist ja im prinzip nicht schwer, nur eben 3 Pixel daneben.
JBeni schrieb:
JLabel.setDisplayedMnemonicIndex ist die Methode die dem JLabel sagt, welcher Buchstabe unterstrichen sein soll.
Danke
Gibt's eventuell auch die Möglichkeit über eine Eigenschaft eines JLabels zu bestimmen, was beim auslösen des Mnemonics gemacht werden soll? Im speziellen möchte ich den aktuellen Focus setzen.
Bisher mache ich das über eine Action für die Inputmap des RootPanes meines Frames. Vielleicht geht das auch einfacher?
cheers, Swordfish
-
Du kannst dem JLabel mit "setLabelFor" sagen, welche Componenten fokusiert wird beim auslösen des Mnemonics. Wahrscheinlich musst du zusätzlich noch "setDisplayedMnemonic" aufrufen, damit das funktioniert (hab es nicht ausprobiert, nur gelesen was die API dazu sagt).
-
Danke. Werd's sofort ausprobieren, wenn ich nach Hause komme. Leider hab' ich mit der javadoc einbindung in Eclipse noch so meine Probleme... Werd' mich noch ein bisschen damit spielen
Ich denke, dass mit
setLabelFor( )
meine Probleme gelöst sind.cheers, Swordfish
PS: In einer Woche bin ich Java spätestens wieder los
-
Swordfish schrieb:
PS: In einer Woche bin ich Java spätestens wieder los
Ja, mir der Einstellung kannst du natürlich kein Spass haben...
-
Swordfish schrieb:
PS: In einer Woche bin ich Java spätestens wieder los
Und dann wieder C++? Du bist wirklich Masochist!
-
JBeni schrieb:
Swordfish schrieb:
PS: In einer Woche bin ich Java spätestens wieder los
Ja, mir der Einstellung kannst du natürlich kein Spass haben...
Es gibt Menschen, die mit Popkorn keine Freude haben, es gibt Menschen, die mit aktiven Antennen keine Freude haben, ... es gibt Menschen, die mit Java keine Freude haben...
Sadist schrieb:
Swordfish schrieb:
PS: In einer Woche bin ich Java spätestens wieder los
Und dann wieder C++? Du bist wirklich Masochist!
Des einen Freud' des andern Leid
cheers, Swordfish
PS: Danke für die Hilfe, aber es ist keine weitere Antwort in diesem Thread nötig - alle Klarheiten sind beseitigt . Falls doch @Mods: bitte schließen. Das wird kein Flamewar!