Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

227
Vistas
Cómo usar varios componentes de pintura al mismo tiempo en java

Estoy haciendo una GUI con Java que representa el problema de la ruta más larga. Estoy usando Graphics 2D para dibujar los vértices y los enlaces entre ellos. Hice un botón que calcula la ruta más larga entre dos vértices. Quiero hacer un enlace que crezca lentamente, así que usé el método Thread.sleep() para hacer eso, pero cuando lo uso, todo el programa se vuelve muy lento y rezagado. He anulado el método paintComponent para dibujar y no puedo usar subprocesos múltiples porque eso genera problemas con EDT (subproceso de envío de eventos). He visto otros temas para Múltiples componentes de pintura, pero nada me ayudó. ¿Alguna idea o ayuda?

 public void paintComponent(Graphics g) { super.paintComponent(g); if(!dragging&&MainFrame.ActiveAddNode) g.drawRect(X,Y, 20, 20);//Virtual rectangle for the vertex p=new Polygon(); for(int i=0;i<Node.size();i++) { p.addPoint(Node.get(i).X+10, Node.get(i).Y+10); g.setColor(Node.get(i).c); g.fillRect(Node.get(i).X, Node.get(i).Y, 20, 20);//represents the graph vertex g.setColor(Color.CYAN); g.drawString(""+i, Node.get(i).X+7, Node.get(i).Y+15);//the number of the vertex } for(int i=0;i<Node.size();i++) for(int j=0;j<Node.get(i).Children.size();j++){ g.setColor(Color.BLUE); for(int k=0;k<link.size()-1;k++) { if(link.get(k)==i&&link.get(k+1)==Node.get(i).Children.get(j)){ g.setColor(Color.RED);//Highlight the Longest path link } } g.drawLine(Node.get(i).X+10, Node.get(i).Y+10, Node.get(Node.get(i).Children.get(j)).X+10 , Node.get(Node.get(i).Children.get(j)).Y+10); int Xsum=(Node.get(i).X+Node.get(Node.get(i).Children.get(j)).X)/2; int Ysum=(Node.get(i).Y+Node.get(Node.get(i).Children.get(j)).Y)/2; g.drawString(""+Node.get(i).Edges.get(j),Xsum,Ysum); }//end of 2nd loop }//end of paint component
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

He usado Thread.sleep()

No use Thread.sleep(...) cuando el código se está ejecutando en Event Dispatch Thread (EDT) . Esto evitará que la GUI se pinte sola.

El objetivo del método paintComponent(...) es pintar el estado actual del componente.

Por lo tanto, necesita un método (s) que le permita alterar dinámicamente el estado del componente. Entonces, tal vez tenga una propiedad como: setPathLength(...) . Entonces, una vez que calcule la ruta más larga, sabrá cuántas iteraciones se requieren para mostrar la ruta completa.

Luego, debe usar un Timer para programar su animación. Cada vez que se dispara el Timer , debe aumentar la "longitud de la ruta" en 1 y luego volver a pintar () su componente. Entonces, cada vez que se pinta un nodo más.

Lea la sección del tutorial de Swing sobre cómo usar los temporizadores de swing para obtener más información.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda