Il testo dell'etichetta è già allineato in alto. Anche se imposti tutti e tre i seguenti valori:
label.setVerticalAlignment(JLabel.TOP);
label.setVerticalTextPosition(JLabel.TOP);
panel.setAlignmentY(TOP_ALIGNMENT);
si dovrebbe ancora trovare quel divario.
Il problema è correlato alla metrica dei caratteri. Il carattere lascia spazio ai segni diacritici, e mentre i numeri inglesi e persino le lettere non contengono segni diacritici in lettere maiuscole, Arial contiene sicuramente una vasta gamma di caratteri internazionali, compresi quelli più alti di una lettera maiuscola, ad esempio, dieresi tedesche (ÄÖÜ) o caratteri contenente segni diacritici portoghesi (ÁÂ).
Se si desidera una soluzione rapida e semplice che sia un trucco, che potrebbe non adattarsi bene ai caratteri e alle piattaforme, è possibile utilizzare un valore negativo su un bordo per compensare le metriche dei caratteri.
label.setBorder(BorderFactory.createEmptyBorder(-3 /*top*/, 0, 0, 0));
Se si vuole risolvere il problema "giusto" si dovrebbe esaminare l'apprendimento sul pacchetto FontMetrics, in quanto ha molte funzioni che potrebbero essere utili per calcolare l'altezza reale e la posizione del testo che viene visualizzato, in modo tale che puoi spostare l'intera stringa della giusta quantità di pixel.
fonte
2011-08-19 00:29:28
dimenticato una riga. label.setFont (font); – arpanoid
La ragione probabile è che alcuni simboli si estendano verso l'alto oltre i numeri e l'allineamento del testo all'interno dell'etichetta, combinato con le dimensioni dell'etichetta, deve tenere conto di più metriche dei caratteri. http://upload.wikimedia.org/wikipedia/commons/3/39/Typography_Line_Terms.svg Non è una risposta alla tua domanda, ma potrebbe essere d'aiuto. –
+1 per includere un'immagine; a parte, non trascurare il valore di ['RenderingHints'] (http://download.oracle.com/javase/6/docs/api/java/awt/RenderingHints.html). – trashgod