Wie man mehrere Symbole (dh, Symbole zwischen Text) in JLabel
mit Grafiken malen? Bitte helfen Sie mir in dieser BemühungSymbole zwischen Text in einem jlabel mit Grafiken
Antwort
Eine Option, die ich verwenden würde, ist eine Folge von JLabels zu haben. Nur mit Symbol und nur mit Text.
Die andere Option wäre die Mini-HTML-Unterstützung des JLabel zu nutzen:
<html><img src='theimage.png'>The text<img src='theimage2.png'>
als Text des JLabel hat. Dieser Ansatz funktioniert für die Textformatierung, aber ich bin mir nicht sicher, ob die Bild-Tags auch dort funktionieren.
Oder haben Sie die JLabel.paint() überschrieben, um benutzerdefinierte Rendering btw zu tun?
Dann würde ich den folgenden Ansatz verwenden:
List<Object> textAndImage = new ArrayList<Object>() {{
add("This ");
add(new ImageIcon("image1.png"));
add(" is ");
add(new ImageIcon("image2.png"));
add(" an ");
add(" imaged text sample ");
}};
FontMetrics fm = g.getFontMetrics();
int x = 0;
for (Object o : textAndImage) {
if (o instanceof String) {
g.drawString((String)o, x, fm.getHeight());
x += fm.stringWidth((String)o);
} else
if (o instanceof ImageIcon) {
((ImageIcon)o).paintIcon(null, g, x, 0);
x += ((ImageIcon)o).getIconWidth();
}
}
Natürlich ist dies nicht eine vollwertige Lösung ist aber könnten Sie ein paar Hinweise geben, wie Sie vorgehen.
Eine Möglichkeit besteht darin, einen benutzerdefinierten Rahmen zu verwenden, der ein Symbol (und einen Text, wenn Sie möchten) malt, sodass Sie unbegrenzt verschachteln können.
Hier ist eine solche Grenze:
/**
* Show a leading or trailing icon in border.
*/
public static class IconBorder implements Border
{
/**
* @param icon - icon to paint for this border
* @param top outer insets for this border
* @param left
* @param bottom
* @param right
*/
public IconBorder(Icon icon, int top, int left, int bottom, int right)
{
setIcon(icon);
top_ = top;
left_ = left;
bottom_ = bottom;
right_ = right;
rect_ = new Rectangle(0, 0, icon_.getIconWidth(), icon_.getIconHeight());
}
public Insets getBorderInsets(Component c)
{
if(icon_ == null)
return new Insets(0, 0, 0, 0);
return isTrailing_ ? new Insets(top_, left_, bottom_, icon_.getIconWidth() + right_) :
new Insets(top_, icon_.getIconWidth() + left_, bottom_, right_);
}
public boolean isBorderOpaque()
{
return false;
}
public void paintBorder(Component c, Graphics g, int x, int y, int width, int height)
{
if(icon_ != null)
{
if(isTrailing_)
x = width - icon_.getIconWidth() + 4;
else
x += left_ - 1;
icon_.paintIcon(c, g, x, y + top_);
rect_.x = x;
rect_.y = y;
}
}
public void setIcon(Icon icon)
{
if(icon_ != icon)
icon_ = icon;
}
public Icon getIcon()
{
return icon_;
}
public void setPosition(boolean isTrailing)
{
isTrailing_ = isTrailing;
}
public Rectangle getIconRect()
{
return rect_;
}
private final int top_;
private final int left_;
private final int bottom_;
private final int right_;
private final Rectangle rect_;
private Icon icon_;
private boolean isTrailing_ = true;
}
Ich benutze dies ein Suchsymbol auf einem JTextField (a la Browser-Suchfeld) hinzuzufügen. getIconRect
kann verwendet werden, um den Mauszeiger zu überprüfen. Zum Beispiel ändere ich den Cursor auf HAND_CURSOR
, wenn die Maus über dem Suchsymbol ist.
- 1. Zwei Zeilen Text in einem JLabel
- 2. Auswählen von Text von einem JLabel?
- 3. Symbole mit Text ausrichten
- 4. JLabel über einem anderen JLabel
- 5. JLabel setLineWrap - scheidenden Text
- 6. Java: JLabel mit Text und Icon
- 7. Text von JLabel mit einem Array/einer Schleife einstellen
- 8. Wie präsentiere ich Text vertikal in einem JLabel? (Java 1.6)
- 9. Dynamischen JLabel-Text in einem JDialog nach Timer setzen
- 10. Freigeben von Grafiken zwischen WPF und Winforms
- 11. Ausrichten von Text in JLabel nach rechts
- 12. Jlabel, das korrekt zu einem Symbol führt
- 13. JLabel bewegt sich mit in JTextArea eingegebenem Text
- 14. Abstand zwischen font awesome Symbole
- 15. Wie man ein Icon in einem JLabel rechtfertigt?
- 16. JLabel mit eingebundenem HTML-Text als JScrollPane-Client
- 17. Eclipse WindowBuilder - Text passt nicht zum JLabel
- 18. eine JLabel vor einem anderen
- 19. JLabel malt neuen Text über den alten, nachdem der Text
- 20. So fügen Sie eine horizontale Lücke mit einem JLabel hinzu
- 21. Xamarin Forms: Symbole in Text einbetten
- 22. Unicode-Text in Java lesen und auf JLabel anzeigen?
- 23. JTextField mit JLabel Stil mit GTKLookAndFeel
- 24. Java - Statistiken Symbole
- 25. Ändern der Farbe eines Textes in einem JLabel
- 26. Drehen Text und Symbole von einem Android App
- 27. Benutzereingabe für JLabel
- 28. Wie setze ich Text von Elementen in JLabel Array?
- 29. BMP in JLabel anzeigen
- 30. ein JLabel mit einem TransferHandler (Drag & Drop) Ziehen
Tags sollte funktionieren, aber HTML-Unterstützung in Swing ist fehlerhaft wie heck. Ein bemerkenswerter Fehler ist, dass bei Verwendung von HTML die L & F-spezifizierten Schriften nicht mehr funktionieren. – Joey
Die Option, mit dynamisch abgerufenen Bildern zu verwenden, funktioniert nicht. Hat die paintComponent für JLabel überschrieben, aber die Reihenfolge von Text und Bild wird nicht vollständig dargestellt. Soll die Größe des Jabels vor dem Lackieren eingestellt werden? –
Basierend auf Informationen anderer Posts: Wenn Sie versuchen, BMPs oder andere nicht unterstützte Images in ein ImageIcon zu laden, funktioniert das nicht. Verwenden Sie die ImageIO.read() -Methode, um das Bild zu erhalten. Wenn das Label keine Größe hat, wird nichts gerendert. Versuchen Sie, es in einen BorderLayout-Container in der CENTER-Region zu platzieren. – akarnokd