Vous êtes sur la page 1sur 4

1

1
Dibujando en
Java:
Graphics
2
Sistema de Coordenadas
Cada uno de los Componentes de Java tiene su
propio sistema de coordenadas, que va desde
la posicin (vertice superior izquierdo) hasta la
posicin determinada por su anchura total y
altura total
3
clase Graphics
Toda la parte grfica de Java se base en la clase
Graphics
4
El mtodo paint()
Se suele sobrecargar el mtodo paint()
de Component
public void paint( Graphics g ) {
g.fillOval( x,y,d,d );
g.setColor( Color.black );
g.drawOval( x,y,d,d ); }
..
}
5
El mtodo paint()
paint() se invoca con repaint()
public void repaint()
public void repaint( int x,int y,int width,int
height )
...
6
Figuras de Graphics
2
7
Textos de Graphics
La clase Graphics dispone de mtodos para
pintar texto:
drawString( String,int,int )
drawChars( char[],int,int,int )
getFont()
getFontMetrics()
getFontMetrics( Font )
setFont( Font )
Font fuenteBold = new Font( "Helvetica",Font.BOLD,12 );
8
Imgenes de Graphics
drawImage( Image,int,int,Color,ImageObserver ),
drawImage( Image,int,int,ImageObserver ),
...
drawImage( Image,int,int,int,int,int,int,int,int,
Color,ImageObserver )
pinta sobre la zona indicada la imagen que se pasa
como parmetro
//carga de una imagen
Image imagen = Toolkit.getDefaultToolkit().getImage(
dibujo.gif" );
9
Pintando un punto
En un constructor de Jpane:
addMouseListener( new MouseAdapter() {
public void mousePressed( MouseEvent evt )
{
int x = evt.getX();
int y = evt.getY();
}}
punto.x = x;
punto.y = y;
repaint();
UCM
10
paint
public void paint ( Graphics g ) {
super.paint( g );
g.fillRect( punto.x-1,punto.y-1,2,2 );
g.drawString(
"("+punto.x+","+punto.y+")",punto.x,punto.y );
}
UCM
11
paint
Es importante que paint() invoque al metodo que reescribe
public void paint ( Graphics g ) {
super.paint( g );
....
}
el mtodo paint() de la clase java.awt.Container
llama al mtodo paint() de todo lo que haya visible
UCM
12
Una cara
public void paint(Graphics g){
super.paint(g);
g.setColor(Color.black);
g.fillOval(105,70,100,100);
g.setColor(Color.green);
//ojos
g.fillOval(125,100,10,10);
g.fillOval(175,100,10,10);
//boca
g.drawArc(118,120,75,30,180,180);
}
3
13
Dibujando rectas entre puntos
class MiCanvas extends Canvas {
protected Vector puntos;
public MiCanvas( ) {
addMouseListener( new MouseAdapter() {
public void mousePressed( MouseEvent evt )
{
MiCanvas c = (MiCanvas)evt.getSource();
c.puntos.addElement( evt.getPoint() );
c.repaint();
}
});
}
UCM
14
Dibujando rectas entre puntos
public void paint( Graphics g ) {
vectoresPintados = 0;
g.setColor( Color.black );
for( int i=0 ; i < puntos.size()-1; i++ ) {
Point p1 = (Point)puntos.elementAt( i );
Point p2 = (Point)puntos.elementAt( i+1 );
g.drawLine( p1.x,p1.y,p2.x,p2.y );
}
15
Update
repaint() llama a update()
La implementacin por defecto de update()
limpia el fondo del componente y luego hace
una llamada a paint()
16
parpadeo
Para evitar el parpadeo, se puede reescribir el mtodo
update en lugar de paint:
public void update( Graphics g ) {
// Solamente se repintan los vectores nuevos
for( int i=vectoresPintados;
i < puntos.size()-1; i++ ) {
Point p1 = (Point)puntos.elementAt( i );
Point p2 = (Point)puntos.elementAt( i+1 );
g.drawLine( p1.x,p1.y,p2.x,p2.y );
}
}
17
Swing:doble-buffering
update() no se invoca sobre componentes Swing
Una de las aportaciones ms notables de Swing es
que ha incluido el soporte para operaciones de
doble-buffering que se activa a travs de la
propiedad doubleBuffered de
javax.swing.Jcomponent (por defecto true).
public boolean isDoubleBuffered()
public void setDoubleBuffered(boolean o) Swing.
18
Swing
Swing, la llamada a paint() se convierte en la
llamada a tres mtodos en el mismo orden:
protected void paintComponent( Graphics g )
protected void paintBorder( Graphics g )
protected void paintChildren( Graphics g )
Los programas que utilicen Swing deberan
sobreescribir el mtodo paintComponent(), en
lugar de sobreescribir el mtodo paint().
Habitualmente no se reescriben los mtodos
paintBorder() y paintChildren(),
4
19
Animacin
Animacin es la presentacin de imgenes en
sucesin, cada una con ligeras diferencias
respecto a la anterior
20
Escuchando el teclado
En constructor: addKeyListener(this);
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()){
case 38:
....;
repaint();
break;
case 40:
...;
repaint();
break;
}}
public void keyReleased(KeyEvent e){}
public void keyTyped(KeyEvent e){}
21
Animacin
En main:
while( true ) {
frame.pondatos(....);
frame.repaint();
try { Thread.currentThread().sleep( 50 ); }
catch( InterruptedException e ) {
System.out.println( e ); }
}
}}

Vous aimerez peut-être aussi