2016-07-12 3 views
0

Diese Frage ist ein Follow-up von meinem previous questionJLabel nicht angezeigt HTML korrekt

ich ein JLabel mit HTML-Text in ihm haben. Der HTML-Inhalt wird jedoch nicht korrekt angezeigt. Das JLabel soll 26x26 Pixel haben, wobei unten rechts eine Zahl angezeigt wird. Mein Code scheint die Nummer nicht an der richtigen Position anzuzeigen, und ihre Höhe scheint abgeschnitten zu sein.

Hier ist mein Code:

final String buffBadgeStyles = "<style>" 
+ "#container {height:26px; width:26px; background-color: red; position:relative;}" 
+ "#bottom {position:absolute; bottom:0; right:0;}" 
+ "</style>"; 

buffSlot_6 = new JLabel(); 
buffSlot_6.setBorder(new LineBorder(Color.BLACK)); 
buffSlot_6.setHorizontalAlignment(SwingConstants.CENTER); 
buffSlot_6.setVerticalAlignment(SwingConstants.CENTER); 
buffSlot_6.setText("<html>" 
+ buffBadgeStyles 
+ "<body>" 
+ "<p id=\"container\"><span id=\"bottom\">2</span></p>" 
+ "</body></html>"); 
buffSlot_6.setFont(new Font("Comic Sans MS", Font.BOLD, 12)); 
panel_playerBuffs.add(buffSlot_6); 

Die JLabel ist gemeint, so etwas sehen enter image description here Aber mein Code wird dieses

Irgendwelche Gedanken enter image description here

zu erzeugen?

+1

1) Swing-Implementierung von HTML/CSS ist sehr einfach. 2) Um eine bessere Hilfe zu erhalten, sollten Sie ein [MCVE] oder [Short, Self Contained, Correct Example] (http://www.sscce.org/) veröffentlichen. –

+1

Warum verwenden Sie HTML? Sie können die Textposition mit Eigenschaften des Etiketts steuern. Lesen Sie die API für Methoden zur Steuerung der horizontalen/vertikalen Position des Textes. – camickr

+0

@camickr Weil ich auch ein Hintergrundbild in der Mitte des Labels zentriert hinzufügen muss. Die JLabel-API erlaubt keine Überlappung von Bildern mit Zeichenfolgen. – Dragneel

Antwort

3

Sie können diese Ansicht mithilfe eines Hilfspanels aufrufen (das die Beschriftung umschließt) und ein geeignetes Layout für das Bedienfeld auswählen. Auf diese Weise brauchen Sie kein HTML. Sie sollten eine Größe von 26 px für das Umbruchfeld anstelle des Labels festlegen.

package so; 

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Font; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.SwingConstants; 
import javax.swing.SwingUtilities; 
import javax.swing.border.LineBorder; 

public class Main { 

    public static void main(String[] args) { 

     SwingUtilities.invokeLater(() -> { 

      JFrame frame = new JFrame("Label test"); 

      JPanel helperPanel = new JPanel(); 

      frame.setContentPane(helperPanel); 
      helperPanel.setLayout(new BorderLayout()); 

      JLabel buffSlot_6 = new JLabel(); 
      buffSlot_6.setBorder(new LineBorder(Color.BLACK)); 
      buffSlot_6.setHorizontalAlignment(SwingConstants.RIGHT); 
      buffSlot_6.setVerticalAlignment(SwingConstants.BOTTOM); 
      buffSlot_6.setText("2"); 

      buffSlot_6.setFont(new Font("Comic Sans MS", Font.BOLD, 12)); 
      helperPanel.add(buffSlot_6, BorderLayout.CENTER); 

      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.setLocationRelativeTo(null); 
      frame.setSize(100, 100); 
      frame.setVisible(true); 

     }); 
    } 
} 
+0

Ja, ich habe versucht, nicht auf diese Methode zurückgreifen. Ich dachte, es wäre eine einfachere Lösung. Wie auch immer, danke. – Dragneel