Problema sobre gráficos
Estimado, tengo un problemilla y quisiera saber si me puedes orientar ...
Necesito almacenar la distribución resultante de sobreponer imágenes pequeñas en una más grande .
Esto es, por ejemplo yo tengo una imagen rectangular representando una recamara, ahí quiero poner una imagen que representa una silla y la quiero poner en un lugar especifico, almacenarlo
Y cuando se recupere, saber que la silla quedo, digamos 5cm a la derecha del centro de la imagen, 10 cm hacia abajo de la linea superior ( son 3 imágenes máximo las que se deberán de sobreponerse )
Si sabes donde puedo hallar un ejemplo para estudiar el código, te lo agradecería.
Saludos.
Necesito almacenar la distribución resultante de sobreponer imágenes pequeñas en una más grande .
Esto es, por ejemplo yo tengo una imagen rectangular representando una recamara, ahí quiero poner una imagen que representa una silla y la quiero poner en un lugar especifico, almacenarlo
Y cuando se recupere, saber que la silla quedo, digamos 5cm a la derecha del centro de la imagen, 10 cm hacia abajo de la linea superior ( son 3 imágenes máximo las que se deberán de sobreponerse )
Si sabes donde puedo hallar un ejemplo para estudiar el código, te lo agradecería.
Saludos.
1 respuesta
Respuesta de alejosoft
1
1
alejosoft, 3 años de experiencia como Ingeniero de Sistemas, I speak English...
Bueno la cosa no es tan complicada como parece, para hacer eso lo que debes es tener en cuenta son 3 cosas:
1- El orden en que dibujas las imágenes, o sea, para que parezca el efecto de que las imágenes más pequeñas están encima de la más grande debes dibujar primero la más grande y luego las más pequeñas.
2- Debes a prender a trabajar con el sistema de coordenadas de la clase java. Awt. Graphics y entender que todo esta sobre un plano bidimensional, solo unas cosas se dibujan encima de otras.
3- Debes crear clases (objetos) que representen las imágenes con sus coordenadas dentro del cuadro de dibujo para que de esa forma, con una estructura de datos o cualquier sistema de almacenamiento puedas guardar y cargar los elementos que hacen parte del dibujo, o sea los objetos imágenes.
Yo tengo ejemplos de dibujos pero no hacen exactamente lo que tu necesitas. Si mi explicación no fue suficiente y quieres que te envíe un ejemplo, házmelo saber y con gusto te lo enviaré, :). Suerte, bye.
1- El orden en que dibujas las imágenes, o sea, para que parezca el efecto de que las imágenes más pequeñas están encima de la más grande debes dibujar primero la más grande y luego las más pequeñas.
2- Debes a prender a trabajar con el sistema de coordenadas de la clase java. Awt. Graphics y entender que todo esta sobre un plano bidimensional, solo unas cosas se dibujan encima de otras.
3- Debes crear clases (objetos) que representen las imágenes con sus coordenadas dentro del cuadro de dibujo para que de esa forma, con una estructura de datos o cualquier sistema de almacenamiento puedas guardar y cargar los elementos que hacen parte del dibujo, o sea los objetos imágenes.
Yo tengo ejemplos de dibujos pero no hacen exactamente lo que tu necesitas. Si mi explicación no fue suficiente y quieres que te envíe un ejemplo, házmelo saber y con gusto te lo enviaré, :). Suerte, bye.
Estimado :
Todo lo que tengas me sirve ya que yo no se de java, en lo que yo he trabajado es en PHP.
Así que, voy a tener que aprender ... creo que eso es bueno ...
Todo lo que tengas me sirve ya que yo no se de java, en lo que yo he trabajado es en PHP.
Así que, voy a tener que aprender ... creo que eso es bueno ...
package simulador;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.Timer;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class Fondo extends JPanel implements MouseListener, MouseMotionListener,
KeyListener, ActionListener {
private Vector nodos;
private Vector lineas;
public static final int MODO_NORMAL = 0;
public static final int MODO_NUEVO_PC = 1;
public static final int MODO_NUEVO_SW = 6;
public static final int MODO_NUEVA_LINEA = 2;
private final int MODO_SELECCION_NODO = 3;
private final int MODO_CREANDO_LINEA = 4;
private final int MODO_FINALIZANDO_LINEA = 5;
private int modo;
private int contadorElementos = 0;
private Nodo origenLinea;
private Nodo destinoLinea;
private ElementoDibujable seleccion;
private Point a, b, temp;
private int last_x, last_y;
private PopupFactory creadorPopup;
private Popup popup;
private JTextPane textoTip = new JTextPane();
private JPanel panelTip = new JPanel();
private JPopupMenu menuContextual = new JPopupMenu();
private JMenuItem menuARP = new JMenuItem( "Ver ARP" );
private JMenuItem menuInfo = new JMenuItem( "Ver informaci¾n de equipo" );
private JMenuItem menuEnviar = new JMenuItem(
"Enviar paquete a otro equipo" );
private Cursor cursorPc = Toolkit.getDefaultToolkit().createCustomCursor(
Global.CURSOR_PC.getImage(), new Point( 0, 0 ), "Nuevo pc" );
private Cursor cursorSwitch = Toolkit.getDefaultToolkit().
createCustomCursor(
Global.CURSOR_SWITCH.getImage(), new Point( 0, 0 ), "Nuevo switch" );
private Cursor cursorLinea = Toolkit.getDefaultToolkit().
createCustomCursor(
Global.BOTON_LINEA.getImage(),
new Point( Global.BOTON_LINEA.getIconWidth() / 2,
Global.BOTON_LINEA.getIconHeight() / 2 ), "Nuevo switch" );
private Cursor cursorNormal = Toolkit.getDefaultToolkit().
createCustomCursor(
Global.CURSOR_NORMAL.getImage(), new Point( 0, 0 ), "default" );
public Fondo() {
enableEvents( AWTEvent.KEY_EVENT_MASK |
AWTEvent.INPUT_METHOD_EVENT_MASK );
nodos = new Vector();
lineas = new Vector();
this.setBackground( Color.white );
this.addMouseListener( this );
this.addMouseMotionListener( this );
this.addKeyListener( this );
t = new Timer( 4000, this );
t.setInitialDelay( 500 );
t.setRepeats( false );
creadorPopup = new PopupFactory();
textoTip.setBackground( SystemColor.textHighlight.brighter() );
textoTip.setForeground( SystemColor.textText );
textoTip.setEditable( false );
textoTip.setFocusable( false );
textoTip.setContentType( "text/html" );
panelTip.setLayout( new BorderLayout() );
panelTip.setBorder( BorderFactory.createLineBorder( Color.
black ) );
panelTip.add( textoTip );
tiempoDeExposicion = new Timer( 4000, this );
tiempoDeExposicion.setRepeats( false );
this.cambiarModo( MODO_NORMAL );
menuContextual.add( menuARP );
menuContextual.add( menuInfo );
menuContextual.add( menuEnviar );
menuEnviar.setIcon(Global.PAQUETE);
menuInfo.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
JOptionPane.showMessageDialog(null,seleccion);
DatosPC datos = new DatosPC( ( PC ) seleccion );
if ( datos.fueAceptado() ) {
Fondo.this.repaint();
}
}
} );
}
public boolean isFocusable() {
return true;
}
public ElementoDibujable obtenerElemento( int id ) {
for ( int i = 0; i < nodos.size(); i++ ) {
ElementoDibujable e = ( ElementoDibujable ) nodos.elementAt( i );
if ( e.obtenerId() == id ) {
return e;
}
}
for ( int i = 0; i < lineas.size(); i++ ) {
ElementoDibujable e = ( ElementoDibujable ) lineas.elementAt( i );
if ( e.obtenerId() == id ) {
return e;
}
}
return null;
}
public void cambiarModo( int modo ) {
this.modo = modo;
switch ( modo ) {
case MODO_NUEVO_PC:
this.setCursor( cursorPc );
break;
case MODO_NUEVO_SW:
this.setCursor( this.cursorSwitch );
break;
case MODO_NUEVA_LINEA:
case MODO_CREANDO_LINEA:
this.setCursor( this.cursorLinea );
break;
default:
this.setCursor( this.cursorNormal );
}
}
/*private void cambiarModo( int modo ){
}*/
public void mouseDragged( MouseEvent e ) {
if ( modo == MODO_SELECCION_NODO && seleccion != null ) {
//rect.setLocation(last_x + e.getX(), last_y + e.getY());
seleccion.cambiarUbicacion( new Point( last_x + e.getX(),
last_y + e.getY() ) );
this.repaint();
}
}
Timer t;
private Timer tiempoDeExposicion;
public void mouseMoved( MouseEvent e ) {
if ( modo == MODO_CREANDO_LINEA ) {
b = e.getPoint();
repaint();
}
else if ( modo == MODO_NORMAL ) {
t.restart();
temp = e.getPoint();
}
}
public void mousePressed( MouseEvent e ) {
switch ( modo ) {
case MODO_NUEVO_SW: {
Nodo n = new Switch( new Point( e.getPoint().x -
( Global.SW.getIconWidth() / 2 ),
e.getPoint().y -
( Global.SW.getIconHeight() / 2 ) ),
contadorElementos++ );
nodos.addElement( n );
//this.cambiarModo( MODO_NORMAL );
repaint();
break;
}
case MODO_NUEVO_PC: {
Nodo n = new PC( new Point( e.getPoint().x -
( Global.PC.getIconWidth() / 2 ),
e.getPoint().y -
( Global.PC.getIconHeight() / 2 ) ),
contadorElementos++ );
nodos.addElement( n );
//this.cambiarModo( MODO_NORMAL );
repaint();
break;
}
case MODO_NUEVA_LINEA: {
Nodo n = buscarNodo( e.getPoint() );
if ( n != null ) {
n.cambiarTipoDeBorde( Nodo.BORDE_PUNTEADO );
origenLinea = n;
a = n.obtenerCentro();
b = a;
this.cambiarModo( MODO_CREANDO_LINEA );
}
else {
this.cambiarModo( MODO_NORMAL );
}
repaint();
break;
}
case MODO_SELECCION_NODO:
case MODO_NORMAL: {
if ( seleccion != null ) {
seleccion.cambiarSeleccion( false );
}
seleccion = null;
Nodo n = buscarNodo( e.getPoint() );
if ( n != null ) {
n.cambiarTipoDeBorde( Nodo.NORMAL );
this.cambiarModo( MODO_SELECCION_NODO );
seleccion = n;
}
else {
for ( int i = 0; i < lineas.size(); i++ ) {
Linea l = ( Linea ) lineas.elementAt( i );
if ( l.contieneElPunto( e.getPoint() ) ) {
l.cambiarSeleccion( true );
seleccion = l;
break;
}
}
}
if ( seleccion != null ) {
last_x = seleccion.getX() - e.getX();
last_y = seleccion.getY() - e.getY();
}
else {
this.cambiarModo( MODO_NORMAL );
}
repaint();
break;
}
case MODO_CREANDO_LINEA: {
Nodo n = buscarNodo( e.getPoint() );
if ( n != null ) {
n.cambiarTipoDeBorde( Nodo.BORDE_PUNTEADO );
destinoLinea = n;
this.cambiarModo( MODO_FINALIZANDO_LINEA );
repaint();
}
break;
}
default:
this.cambiarModo( MODO_NORMAL );
}
}
private Nodo buscarNodo( Point punto ) {
for ( int i = 0; i < nodos.size(); i++ ) {
Object elem = nodos.elementAt( i );
Nodo n = ( Nodo ) elem;
if ( n.contieneAlPunto( punto ) ) {
return n;
}
}
return null;
}
public void mouseReleased( MouseEvent e ) {
try {
switch ( modo ) {
case MODO_FINALIZANDO_LINEA: {
boolean conectados = origenLinea.estaConectadoCon(
destinoLinea );
if ( origenLinea != null && destinoLinea != null &&
!conectados &&
!( conectados = ( origenLinea == destinoLinea ) ) ) {
Linea l = new Linea( a,
b,
contadorElementos++ );
origenLinea.conectarLinea( l, true );
destinoLinea.conectarLinea( l, false );
lineas.addElement( l );
this.cambiarModo( MODO_NUEVA_LINEA );
origenLinea.cambiarTipoDeBorde( Nodo.SIN_BORDE );
destinoLinea.cambiarTipoDeBorde( Nodo.SIN_BORDE );
repaint();
}
if ( conectados ) {
this.cambiarModo( MODO_NORMAL );
origenLinea.cambiarTipoDeBorde( Nodo.SIN_BORDE );
destinoLinea.cambiarTipoDeBorde( Nodo.SIN_BORDE );
repaint();
}
break;
}
case MODO_SELECCION_NODO: {
if ( e.isPopupTrigger() ) {
menuContextual.show( this, e.getX(), e.getY() );
}
}
}
}
catch ( Exception ex ) {
ex.printStackTrace();
}
}
public void mouseClicked( MouseEvent e ) {}
public void mouseEntered( MouseEvent e ) {
this.requestFocus();
}
public void mouseExited( MouseEvent e ) {
t.stop();
}
public void paintComponent( Graphics g ) {
super.paintComponent( g );
for ( int i = 0; i < lineas.size(); i++ ) {
Linea l = ( Linea ) lineas.elementAt( i );
l.dibujar( g );
}
for ( int i = 0; i < nodos.size(); i++ ) {
Nodo n = ( Nodo ) nodos.elementAt( i );
n.dibujar( g );
}
if ( modo == MODO_CREANDO_LINEA ||
modo == MODO_FINALIZANDO_LINEA ) {
Graphics2D g2 = ( Graphics2D ) g;
BasicStroke dotted = new BasicStroke( 2, BasicStroke.CAP_SQUARE,
BasicStroke.JOIN_ROUND, 0,
new float[] {2, 10, 2, 10}
, 0 );
g2.setStroke( dotted );
g2.setRenderingHint( RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON );
g2.drawLine( a.x, a.y, b.x, b.y );
}
}
public void keyPressed( KeyEvent e ) {
if ( e.getKeyCode() == e.VK_DELETE && seleccion != null ) {
if ( nodos.contains( seleccion ) ) {
Nodo n = ( Nodo ) seleccion;
int lines[] = n.obtenerIdLineas();
for ( int i = 0; i < lines.length; i++ ) {
Linea l = buscarLinea( lines );
for ( int j = 0; j < nodos.size(); j++ ) {
Nodo naux = ( Nodo ) nodos.elementAt( j );
naux.desconectarLinea( l.obtenerId() );
}
lineas.remove( l );
}
nodos.remove( n );
}
else if ( lineas.contains( seleccion ) ) {
Linea l = ( Linea ) seleccion;
for ( int i = 0; i < nodos.size(); i++ ) {
Nodo n = ( Nodo ) nodos.elementAt( i );
n.desconectarLinea( l.obtenerId() );
}
lineas.remove( l );
}
seleccion = null;
repaint();
}
}
private Linea buscarLinea( int idLinea ) {
for ( int i = 0; i < lineas.size(); i++ ) {
Linea l = ( Linea ) lineas.elementAt( i );
if ( l.obtenerId() == idLinea ) {
return l;
}
}
return null;
}
public void keyReleased( KeyEvent e ) {
}
public void keyTyped( KeyEvent e ) {
}
public void actionPerformed( ActionEvent e ) {
if ( e.getSource() == tiempoDeExposicion ) {
if ( popup != null ) {
popup.hide();
popup = null;
}
if ( tiempoDeExposicion.isRunning() ) {
tiempoDeExposicion.stop();
}
return;
}
Nodo p = this.buscarNodo( temp );
if ( p != null ) {
Point ubicacionEnPantalla = this.getLocationOnScreen();
textoTip.setText( "<html><Strong>" + p.obtenerId() +
"</Strong></html>" );
this.actionPerformed( new ActionEvent( tiempoDeExposicion, 0, null,
0 ) );
popup = creadorPopup.getPopup( this, panelTip,
ubicacionEnPantalla.x + temp.x + 15,
ubicacionEnPantalla.y + temp.y );
popup.show();
tiempoDeExposicion.start();
}
}
}
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.Timer;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class Fondo extends JPanel implements MouseListener, MouseMotionListener,
KeyListener, ActionListener {
private Vector nodos;
private Vector lineas;
public static final int MODO_NORMAL = 0;
public static final int MODO_NUEVO_PC = 1;
public static final int MODO_NUEVO_SW = 6;
public static final int MODO_NUEVA_LINEA = 2;
private final int MODO_SELECCION_NODO = 3;
private final int MODO_CREANDO_LINEA = 4;
private final int MODO_FINALIZANDO_LINEA = 5;
private int modo;
private int contadorElementos = 0;
private Nodo origenLinea;
private Nodo destinoLinea;
private ElementoDibujable seleccion;
private Point a, b, temp;
private int last_x, last_y;
private PopupFactory creadorPopup;
private Popup popup;
private JTextPane textoTip = new JTextPane();
private JPanel panelTip = new JPanel();
private JPopupMenu menuContextual = new JPopupMenu();
private JMenuItem menuARP = new JMenuItem( "Ver ARP" );
private JMenuItem menuInfo = new JMenuItem( "Ver informaci¾n de equipo" );
private JMenuItem menuEnviar = new JMenuItem(
"Enviar paquete a otro equipo" );
private Cursor cursorPc = Toolkit.getDefaultToolkit().createCustomCursor(
Global.CURSOR_PC.getImage(), new Point( 0, 0 ), "Nuevo pc" );
private Cursor cursorSwitch = Toolkit.getDefaultToolkit().
createCustomCursor(
Global.CURSOR_SWITCH.getImage(), new Point( 0, 0 ), "Nuevo switch" );
private Cursor cursorLinea = Toolkit.getDefaultToolkit().
createCustomCursor(
Global.BOTON_LINEA.getImage(),
new Point( Global.BOTON_LINEA.getIconWidth() / 2,
Global.BOTON_LINEA.getIconHeight() / 2 ), "Nuevo switch" );
private Cursor cursorNormal = Toolkit.getDefaultToolkit().
createCustomCursor(
Global.CURSOR_NORMAL.getImage(), new Point( 0, 0 ), "default" );
public Fondo() {
enableEvents( AWTEvent.KEY_EVENT_MASK |
AWTEvent.INPUT_METHOD_EVENT_MASK );
nodos = new Vector();
lineas = new Vector();
this.setBackground( Color.white );
this.addMouseListener( this );
this.addMouseMotionListener( this );
this.addKeyListener( this );
t = new Timer( 4000, this );
t.setInitialDelay( 500 );
t.setRepeats( false );
creadorPopup = new PopupFactory();
textoTip.setBackground( SystemColor.textHighlight.brighter() );
textoTip.setForeground( SystemColor.textText );
textoTip.setEditable( false );
textoTip.setFocusable( false );
textoTip.setContentType( "text/html" );
panelTip.setLayout( new BorderLayout() );
panelTip.setBorder( BorderFactory.createLineBorder( Color.
black ) );
panelTip.add( textoTip );
tiempoDeExposicion = new Timer( 4000, this );
tiempoDeExposicion.setRepeats( false );
this.cambiarModo( MODO_NORMAL );
menuContextual.add( menuARP );
menuContextual.add( menuInfo );
menuContextual.add( menuEnviar );
menuEnviar.setIcon(Global.PAQUETE);
menuInfo.addActionListener( new ActionListener() {
public void actionPerformed( ActionEvent e ) {
JOptionPane.showMessageDialog(null,seleccion);
DatosPC datos = new DatosPC( ( PC ) seleccion );
if ( datos.fueAceptado() ) {
Fondo.this.repaint();
}
}
} );
}
public boolean isFocusable() {
return true;
}
public ElementoDibujable obtenerElemento( int id ) {
for ( int i = 0; i < nodos.size(); i++ ) {
ElementoDibujable e = ( ElementoDibujable ) nodos.elementAt( i );
if ( e.obtenerId() == id ) {
return e;
}
}
for ( int i = 0; i < lineas.size(); i++ ) {
ElementoDibujable e = ( ElementoDibujable ) lineas.elementAt( i );
if ( e.obtenerId() == id ) {
return e;
}
}
return null;
}
public void cambiarModo( int modo ) {
this.modo = modo;
switch ( modo ) {
case MODO_NUEVO_PC:
this.setCursor( cursorPc );
break;
case MODO_NUEVO_SW:
this.setCursor( this.cursorSwitch );
break;
case MODO_NUEVA_LINEA:
case MODO_CREANDO_LINEA:
this.setCursor( this.cursorLinea );
break;
default:
this.setCursor( this.cursorNormal );
}
}
/*private void cambiarModo( int modo ){
}*/
public void mouseDragged( MouseEvent e ) {
if ( modo == MODO_SELECCION_NODO && seleccion != null ) {
//rect.setLocation(last_x + e.getX(), last_y + e.getY());
seleccion.cambiarUbicacion( new Point( last_x + e.getX(),
last_y + e.getY() ) );
this.repaint();
}
}
Timer t;
private Timer tiempoDeExposicion;
public void mouseMoved( MouseEvent e ) {
if ( modo == MODO_CREANDO_LINEA ) {
b = e.getPoint();
repaint();
}
else if ( modo == MODO_NORMAL ) {
t.restart();
temp = e.getPoint();
}
}
public void mousePressed( MouseEvent e ) {
switch ( modo ) {
case MODO_NUEVO_SW: {
Nodo n = new Switch( new Point( e.getPoint().x -
( Global.SW.getIconWidth() / 2 ),
e.getPoint().y -
( Global.SW.getIconHeight() / 2 ) ),
contadorElementos++ );
nodos.addElement( n );
//this.cambiarModo( MODO_NORMAL );
repaint();
break;
}
case MODO_NUEVO_PC: {
Nodo n = new PC( new Point( e.getPoint().x -
( Global.PC.getIconWidth() / 2 ),
e.getPoint().y -
( Global.PC.getIconHeight() / 2 ) ),
contadorElementos++ );
nodos.addElement( n );
//this.cambiarModo( MODO_NORMAL );
repaint();
break;
}
case MODO_NUEVA_LINEA: {
Nodo n = buscarNodo( e.getPoint() );
if ( n != null ) {
n.cambiarTipoDeBorde( Nodo.BORDE_PUNTEADO );
origenLinea = n;
a = n.obtenerCentro();
b = a;
this.cambiarModo( MODO_CREANDO_LINEA );
}
else {
this.cambiarModo( MODO_NORMAL );
}
repaint();
break;
}
case MODO_SELECCION_NODO:
case MODO_NORMAL: {
if ( seleccion != null ) {
seleccion.cambiarSeleccion( false );
}
seleccion = null;
Nodo n = buscarNodo( e.getPoint() );
if ( n != null ) {
n.cambiarTipoDeBorde( Nodo.NORMAL );
this.cambiarModo( MODO_SELECCION_NODO );
seleccion = n;
}
else {
for ( int i = 0; i < lineas.size(); i++ ) {
Linea l = ( Linea ) lineas.elementAt( i );
if ( l.contieneElPunto( e.getPoint() ) ) {
l.cambiarSeleccion( true );
seleccion = l;
break;
}
}
}
if ( seleccion != null ) {
last_x = seleccion.getX() - e.getX();
last_y = seleccion.getY() - e.getY();
}
else {
this.cambiarModo( MODO_NORMAL );
}
repaint();
break;
}
case MODO_CREANDO_LINEA: {
Nodo n = buscarNodo( e.getPoint() );
if ( n != null ) {
n.cambiarTipoDeBorde( Nodo.BORDE_PUNTEADO );
destinoLinea = n;
this.cambiarModo( MODO_FINALIZANDO_LINEA );
repaint();
}
break;
}
default:
this.cambiarModo( MODO_NORMAL );
}
}
private Nodo buscarNodo( Point punto ) {
for ( int i = 0; i < nodos.size(); i++ ) {
Object elem = nodos.elementAt( i );
Nodo n = ( Nodo ) elem;
if ( n.contieneAlPunto( punto ) ) {
return n;
}
}
return null;
}
public void mouseReleased( MouseEvent e ) {
try {
switch ( modo ) {
case MODO_FINALIZANDO_LINEA: {
boolean conectados = origenLinea.estaConectadoCon(
destinoLinea );
if ( origenLinea != null && destinoLinea != null &&
!conectados &&
!( conectados = ( origenLinea == destinoLinea ) ) ) {
Linea l = new Linea( a,
b,
contadorElementos++ );
origenLinea.conectarLinea( l, true );
destinoLinea.conectarLinea( l, false );
lineas.addElement( l );
this.cambiarModo( MODO_NUEVA_LINEA );
origenLinea.cambiarTipoDeBorde( Nodo.SIN_BORDE );
destinoLinea.cambiarTipoDeBorde( Nodo.SIN_BORDE );
repaint();
}
if ( conectados ) {
this.cambiarModo( MODO_NORMAL );
origenLinea.cambiarTipoDeBorde( Nodo.SIN_BORDE );
destinoLinea.cambiarTipoDeBorde( Nodo.SIN_BORDE );
repaint();
}
break;
}
case MODO_SELECCION_NODO: {
if ( e.isPopupTrigger() ) {
menuContextual.show( this, e.getX(), e.getY() );
}
}
}
}
catch ( Exception ex ) {
ex.printStackTrace();
}
}
public void mouseClicked( MouseEvent e ) {}
public void mouseEntered( MouseEvent e ) {
this.requestFocus();
}
public void mouseExited( MouseEvent e ) {
t.stop();
}
public void paintComponent( Graphics g ) {
super.paintComponent( g );
for ( int i = 0; i < lineas.size(); i++ ) {
Linea l = ( Linea ) lineas.elementAt( i );
l.dibujar( g );
}
for ( int i = 0; i < nodos.size(); i++ ) {
Nodo n = ( Nodo ) nodos.elementAt( i );
n.dibujar( g );
}
if ( modo == MODO_CREANDO_LINEA ||
modo == MODO_FINALIZANDO_LINEA ) {
Graphics2D g2 = ( Graphics2D ) g;
BasicStroke dotted = new BasicStroke( 2, BasicStroke.CAP_SQUARE,
BasicStroke.JOIN_ROUND, 0,
new float[] {2, 10, 2, 10}
, 0 );
g2.setStroke( dotted );
g2.setRenderingHint( RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON );
g2.drawLine( a.x, a.y, b.x, b.y );
}
}
public void keyPressed( KeyEvent e ) {
if ( e.getKeyCode() == e.VK_DELETE && seleccion != null ) {
if ( nodos.contains( seleccion ) ) {
Nodo n = ( Nodo ) seleccion;
int lines[] = n.obtenerIdLineas();
for ( int i = 0; i < lines.length; i++ ) {
Linea l = buscarLinea( lines );
for ( int j = 0; j < nodos.size(); j++ ) {
Nodo naux = ( Nodo ) nodos.elementAt( j );
naux.desconectarLinea( l.obtenerId() );
}
lineas.remove( l );
}
nodos.remove( n );
}
else if ( lineas.contains( seleccion ) ) {
Linea l = ( Linea ) seleccion;
for ( int i = 0; i < nodos.size(); i++ ) {
Nodo n = ( Nodo ) nodos.elementAt( i );
n.desconectarLinea( l.obtenerId() );
}
lineas.remove( l );
}
seleccion = null;
repaint();
}
}
private Linea buscarLinea( int idLinea ) {
for ( int i = 0; i < lineas.size(); i++ ) {
Linea l = ( Linea ) lineas.elementAt( i );
if ( l.obtenerId() == idLinea ) {
return l;
}
}
return null;
}
public void keyReleased( KeyEvent e ) {
}
public void keyTyped( KeyEvent e ) {
}
public void actionPerformed( ActionEvent e ) {
if ( e.getSource() == tiempoDeExposicion ) {
if ( popup != null ) {
popup.hide();
popup = null;
}
if ( tiempoDeExposicion.isRunning() ) {
tiempoDeExposicion.stop();
}
return;
}
Nodo p = this.buscarNodo( temp );
if ( p != null ) {
Point ubicacionEnPantalla = this.getLocationOnScreen();
textoTip.setText( "<html><Strong>" + p.obtenerId() +
"</Strong></html>" );
this.actionPerformed( new ActionEvent( tiempoDeExposicion, 0, null,
0 ) );
popup = creadorPopup.getPopup( this, panelTip,
ubicacionEnPantalla.x + temp.x + 15,
ubicacionEnPantalla.y + temp.y );
popup.show();
tiempoDeExposicion.start();
}
}
}
- Compartir respuesta
- Anónimo
ahora mismo