Intento facer una clase para formatear textos (fuente, medida, estilo y color). Pueden verla más abajo. Pero me encuentro con un problema. Al cambiar la fuente ocurren dos cosas: el label lTest solo visualiza unas pocas fuentes, en cambio con drawString (en "paint") se ven muchas más pero las fuentes gráficas aparecen como cuadritos. ¿Cúal es el motivo y qué debo hacer para que funcione correctamente?
Código PHP:
import java.applet.Applet;
import java.awt.*;
import java.util.Vector;
public class Formato extends Applet {
Label lIdioma, lFont, lTest;
Choice cIdioma, cFont, cMida, cColor;
Font fFont;
Color color;
String sText;
public void init() {
setLayout( null );
setBackground( Color.lightGray );
lTest = new Label( "provaaaaaaaaannnnt" );
add( lTest );
lTest.reshape(100, 100, 200, 24);
lTest.setForeground( Color.yellow );
lIdioma = new Label( "Idioma" );
add( lIdioma );
lIdioma.reshape(20, 20, 50, 24);
cIdioma = new Choice();
cIdioma.addItem( "Castellano" );
cIdioma.addItem( "Català" );
add( cIdioma );
cIdioma.reshape(100, 20, 120, 24);
lFont = new Label( "Font" );
add( lFont );
lFont.reshape(20, 50, 50, 24);
cFont = new Choice();
GraphicsEnvironment gEnv = GraphicsEnvironment.getLocalGraphicsEnvironment();
String envfonts[] = gEnv.getAvailableFontFamilyNames();
Vector vector = new Vector();
for ( int i = 1; i < envfonts.length; i++ ) {
vector.addElement(envfonts[i]);
cFont.addItem(envfonts[i]);
}
add( cFont );
cFont.reshape(100, 50, 180, 24);
cMida = new Choice();
cMida.addItem( "10" );
cMida.addItem( "12" );
cMida.addItem( "14" );
cMida.addItem( "16" );
cMida.addItem( "18" );
add( cMida );
cMida.reshape(290, 50, 50, 24);
cColor = new Choice();
cColor.addItem( "amarillo" );
cColor.addItem( "añil" );
cColor.addItem( "azul" );
cColor.addItem( "blanco" );
cColor.addItem( "gris" );
cColor.addItem( "gris claro" );
cColor.addItem( "magenta" );
cColor.addItem( "naranja" );
cColor.addItem( "negro" );
cColor.addItem( "rojo" );
cColor.addItem( "rosa" );
cColor.addItem( "verde" );
cColor.addItem( "verde claro" );
add( cColor );
cColor.reshape( 350, 50, 100, 24 );
fFont = new Font("Alibi", Font.PLAIN, 10);
color = Color.yellow;
sText = "Texto de prueba...";
}
public void paint( Graphics g )
{
g.setFont( fFont );
g.setColor( color );
g.drawString( sText, 100, 140 );
}
public boolean handleEvent( Event evt ) {
if( evt.target == cIdioma && evt.id == 1001 ) {
lTest.setText( cIdioma.getSelectedItem() );
if ( cIdioma.getSelectedIndex() == 0 )
sText = "Texto de prueba...";
else
sText = "Text de prova...";
repaint();
return( true );
}
else if(( evt.target == cFont || evt.target == cMida ) && evt.id == 1001 ) {
int iMida = new Integer( cMida.getSelectedItem() );
lTest.setFont( new Font(cFont.getSelectedItem(), Font.PLAIN, iMida) );
fFont = new Font(cFont.getSelectedItem(), Font.PLAIN, iMida);
repaint();
}
else if( evt.target == cColor && evt.id == 1001 ) {
switch( cColor.getSelectedIndex() ) {
case 0: color = Color.yellow; break;
case 1: color = Color.blue; break;
case 2: color = Color.cyan; break;
case 3: color = Color.white; break;
case 4: color = Color.gray; break;
case 5: color = Color.darkGray; break;
case 6: color = Color.magenta; break;
case 7: color = Color.orange; break;
case 8: color = Color.black; break;
case 9: color = Color.red; break;
case 10: color = Color.pink; break;
case 11: color = Color.green; break;
case 12: color = Color.lightGray; break;
}
repaint();
lTest.setForeground( color );
}
switch( evt.id ) {
default:
return( false );
}
}
}
Y por último una consulta: ¿es posible que los desplegables incluyan elementos gráficos?
1- que en el desplegable de fuentes, cada linea aparezca formateada con su fuente correctamente.
2- que el desplegable de color incluya recuadros de colores
3- o que en el desplegable de color cada linia se vea en su color
4- igualmente con los estilos (normal, cursiva,...)
Les agradezco de antemano su ayuda, pues ando un poco perdido entre tantas clases, layouts, eventos, ...