|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
[JAVA] Ridimensionamento testo JLabel
come faccio il ridimensionamento automatico???
non ho le api e non posso scaricarle, e sto usando textpad
__________________
My gaming placement |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Ridimensionare in base a cosa? Alla grandezza della finestra che la contiene?
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
in effetti sono stato poco chiaro
praticamente nel frame ho 3 bottoni e 2 jlabel, il frame è ridimensionabile, perciò, se lo rendo troppo stretto, la scritta scompare e appaiono i fatidici puntini ecco, io vorrei, che al ridimensionamento del frame si ridimensionasse anche il testo all'interno della jlabel. a proposito, il setBackground, funziona???
__________________
My gaming placement |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
comunque guarda questo è un pezzo di codice che avevo scritto tempo fa per ridimensionare in automatico il testo di un Jbutton, vedi se ti può essere utile...
Codice:
protected void paintComponent(Graphics g){
super.paintComponent(antialiasTesto(g));
width=((Container)getTopLevelAncestor()).getWidth();
if(rid){
if(size!=width){
for(int i=0;i<arrayFont.length;i++){
arrayFont[i]=arrayFont[i].deriveFont((width/(w+0.0f))*fontSize[i]);
}
setFont(arrayFont[0]);
}
}
size=width;
}
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
a proprio in brutal force mode
aspetto se esiste qualcosa di meno brutale, altrimenti lo adatto, comunque grazie mille
__________________
My gaming placement |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
per chiarezza:
Codice:
arrayFont[i]=arrayFont[i].deriveFont((width/(w+0.0f))*fontSize[i]); |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Quote:
|
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
up
__________________
My gaming placement |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Puoi determinare una corrispondenza tra le dimensioni di un font e la larghezza di una stringa in pixel e poi usare quella corrispondenza per stabilire la dimensione migliore del font.
Codice:
/** ComponentAdapter per un'etichetta JLabel: adatta
le dimensioni del font alla larghezza dell'etichetta */
public class FontAdapter extends ComponentAdapter {
private double pixPoint = 0;
/** Invocato quando il componente bersaglio sia
ridimensionato. */
public void componentResized(ComponentEvent e) {
JLabel label = (JLabel)e.getComponent();
if(pixPoint == 0) {
computePixPoint(label);
}
Insets margin = label.getInsets();
int width = label.getWidth() - (margin.left + margin.right);
Font font = label.getFont().deriveFont((float)getBestFontSize(width));
label.setFont(font);
}
/** Calcola la dimensione ideale del font affinchè la stringa
precomputata stia nello spazio width */
private int getBestFontSize(int width) {
return (int)(pixPoint * width);
}
/** Calcola la corrispondenza pixel-punto per la stringa, il font
e in contesto grafico dell'etichetta in argomento. */
private void computePixPoint(JLabel label) {
Font font = label.getFont();
FontRenderContext ctx = ((Graphics2D)label.getGraphics()).getFontRenderContext();
String text = label.getText();
double stringWidth = font.getStringBounds(text, ctx).getWidth();
stringWidth += font.getStringBounds("w", ctx).getWidth();
pixPoint = font.getSize() / stringWidth;
}
}
Sarebbe di gran lunga preferibile non appoggiarsi a JLabel ma creare un component ad hoc. Ciò che il codice qui sopra fa, infatti, è interferire con l'effetto risultante dall'applicazione dell'algoritmo che determina quando il testo di una JLabel debba essere sostituito dai puntini (nella fattispecie, ne impedisci i presupposti di applicabilità). Tale algoritmo, tuttavia, non appartiene al contratto di JLabel dunque l'interazione con esso si basa su asserti di cui non v'è garanzia. La cosa è evidente nell'enunciato: stringWidth += font.getStringBounds("w", ctx).getWidth(); Qui aumento arbitrariamente la dimensione del testo di un valore pari al carattere presumibilmente più largo (w) presupponendo che se un certo testo aumentato della dimensione del più largo dei caratteri disponibili rientra nello spazio orizzontale disponibile allora il testo non incrementato sarà certamente proiettato dall'etichetta senza sostituzione in "...". Insomma, occhio |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:28.



















