Domanda

Come faccio ad avere un JLabel visualizzazione di una stringa HTML ad apparire in grigio (che è il comportamento di JLabels che non visualizzano testo HTML)? C'è un altro modo che in realtà cambiando il colore stesso modificando la proprietà foreground?

JLabel label1 = new JLabel("Normal text");
JLabel label2 = new JLabel("<html>HTML <b>text</b>");
// Both labels are now black in colour

label1.setEnabled(false);
label2.setEnabled(false);
// label1 is greyed out, label2 is still black in colour

La ringrazio molto per tutte le vostre risposte. Da quanto ho capito, sembra che Java non supporta ingrigimento automatica di JLabels quando usano testo HTML. soluzione di Suraj è venuto più vicino alla correzione considerando i limiti.

Ho però provato un diverso out-of-the approccio di dialogo, dove ho messo le JLabels testo HTML all'interno di un JPanel interiore e ha fatto questo:

mInnerPanel.setEnabled(shouldShow); //shouldShow is a boolean value

Il che non ha funzionato. Eventuali suggerimenti per questo modo?


EDIT: Aggiunto soluzione implementata href="https://stackoverflow.com/questions/2242542/jlabel-not-greyed-out-when-disabled-when-html-text-displayed/2249050#2249050"> .

È stato utile?

Soluzione

Se il testo è HTML, il testo solito essere disattivata a causa del seguente codice nel BasicLabelUI#paint()

        View v = (View) c.getClientProperty(BasicHTML.propertyKey);
        if (v != null) {
        v.paint(g, paintTextR);
        }

Come si può vedere se il testo è HTML, poi la vista viene utilizzato per dipingere e non è selezionata wheter l'etichetta è abilitato o meno. Quindi abbiamo bisogno di farlo esplicitamente come illustrato di seguito:

label2.addPropertyChangeListener(new PropertyChangeListener() {
   public void propertyChange(PropertyChangeEvent evt) {
    if (!evt.getPropertyName().equals("enabled"))
     return;
    if (evt.getNewValue().equals(Boolean.FALSE))
     label2.setText("<html><font color=gray>HTML <b>text</b></html>");
    else
     label2.setText("<html><font color=black>HTML <b>text</b></html>");
   }
  });

Altri suggerimenti

Vorrei suggerire il seguente, che è una combinazione di due soluzioni fornite qui:

public class HtmlLabel extends JLabel{
    public void setEnabled(boolean enabled){
        if(getClientProperty(BasicHTML.propertyKey) != null ){
            Color foreground = (enabled) ? SystemColor.textText : SystemColor.textInactiveText;
            setForeground(foreground);
        }
        super.setEnabled(enabled);
    }
}

È possibile specificare il colore del carattere nel codice HTML.

l'override del metodo paint nell'interfaccia utente, impostare la proprietà client BasicHTML.propertyKey per nulla se si è disattivato e chiamare eccellente ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top