Curso Java Experto
Clase 2
Graphics2D
setPaint(Color color)
g2.setPaint(Color.RED);
g2.drawString("Cuidado",100,100);
JPanel
setBackground(Color color)
setForeground(Color color)
Color
Black
Blue
Red
Cyan
const
...
La clase java.awt.Color ofrece constantes para 13 colores estándares.
También permite definir un color personalizado
Color(int rojo, int verde, int azul)
brighter()
darker()
Producen versiones más brillantes o más apagadas del color en curso.
SystemColor
Las constantes en esta clase encapsulan los colores que se emplean para los distintos elementos del sistema de usuario.
desktop: color de fondo del escritorio
window: color de fondo de las ventanas
menu: color de fondo para los menús
text: color de fondo para el texto
...
Basta con rellenar en lugar de pintar.
Rectangle2D rectangulo = ...;
g2.setPaint(Color.RED);
g2.fill(rectangulo);
class MarcoColor extends JFrame {
public MarcoColor() {
setSize(400, 400);
setTitle("Prueba Figuras con colores");
LaminaConRelleno lamina = new LaminaConRelleno();
lamina.setBackground(SystemColor.window);
add(lamina);
}
}
class LaminaConRelleno extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
// Dibujar rectangulo
double xizq = 100;
double ysup = 100;
double anchura = 200;
double altura = 150;
Rectangle2D rectangulo = new Rectangle2D.Double(xizq, ysup, anchura, altura);
g2.setColor(Color.WHITE);
g2.draw(rectangulo);
g2.setPaint(Color.BLUE);
g2.fill(rectangulo);
// Dibujar elipse inscrita
Ellipse2D elipse = new Ellipse2D.Double();
elipse.setFrame(rectangulo);
g2.setPaint(Color.PINK);
g2.fill(elipse);
// dibujar linea diagonal
g2.setPaint(new Color(10, 70, 20).brighter().brighter());
g2.draw(new Line2D.Double(xizq, ysup, xizq + anchura, ysup + altura));
}}Ejercicio 1
Graphics2D
setFont(Font fuente)
Font
Font(tipo,estilo,tamaño)
BOLD
PLAIN
ITALIC
import java.awt.GraphicsEnvironment;
public class ListaDeFuentes {
public static void main(String[] args) {
String[] nombresFuentes = GraphicsEnvironment.getLocalGraphicsEnvironment()
.getAvailableFontFamilyNames();
for(String nombre : nombresFuentes)
System.out.println(nombre);
}
}
Para poder establecer una base común, AWT define 5 nombres de fuentes lógicos:
Equivalencia se define en jre/lib/fontconfig.properties
A partir de la versión 1.3 de JDK se pueden leer fuentes TrueType.
Ejercicio 3
class MarcoTexto extends JFrame {
public MarcoTexto() {
setSize(400, 400);
setTitle("Prueba con fuentes");
LaminaConTexto lamina = new LaminaConTexto();
add(lamina);
}
}
class LaminaConTexto extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
Font fuente = new Font("Serif", Font.BOLD, 14);
g2.setFont(fuente);
g2.setColor(Color.PINK);
String nombre = "Ejemplo fuente";
// Medimos mensaje
FontRenderContext contexto = g2.getFontRenderContext();
Rectangle2D limites = fuente.getStringBounds(nombre, contexto);
// obtenemos posicion
double x = (getWidth() - limites.getWidth()) / 2;
double y = (getHeight() - limites.getHeight()) / 2;
g2.drawString(nombre, (int) x, (int) y);
}
}
Image
ImageIO
Graphics
java.awt
javax.imageio
java.awt
getWidth()
getHeigth()
read(URL url)
read(File file)
drawImage(Image imagen, int x, int y,null)
copyArea()
Una vez que las imágenes están almacenadas en ficheros locales podemos leerlas desde la aplicación de Java para visualizarlas utilizando objetos de tipo Graphics.
File input = new File("src/icono.jpg");
Image imagen = ImageIO.read(input);URL input = new URL(url);
Image imagen = ImageIO.read(input);public void paintComponent(Graphics g) {
...
// Dibujo imagen
g.drawImage(imagen, x, y, null);
...
}class LaminaConImagen extends JPanel {
private Image imagen;
public LaminaConImagen() {
File input = new File("src/icono.jpg");
try {
imagen = ImageIO.read(input);
} catch (IOException e) {
e.printStackTrace();
System.out.println("No se encuentra la imagen");
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
// Dibujo imagen
g.drawImage(imagen, 0, 0, null);
int ancho = imagen.getWidth(this);
int alto = imagen.getHeight(this);
// Copio imagen
for (int i = 0; i * ancho <= getWidth(); i++)
for (int j = 0; j * alto <= getHeight(); j++)
if (i + j > 0)
g.copyArea(0, 0, ancho, alto, i * ancho, j * alto);
}
}Ejercicio 4
Ver: http://programmers.stackexchange.com/questions/143736/why-do-we-need-private-variables
Empleado e;
e = new Empleado(...);
e = new Administrador(...);
Empleado e1;
e1 = new Secretaria(...);El polimorfismo en Java consiste en dos propiedades:
e.calcularSueldo();
e1.calcularSueldo();