Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: andrew522 en 03 de Febrero 2022, 17:10

Título: Java código dibujar figura robot guerra de las galaxias r2-d2 fillRect awt swing
Publicado por: andrew522 en 03 de Febrero 2022, 17:10
Hola, hice esta figura de robot dibujado en Java. Ya lo tengo terminado, el problema es que tengo muchas líneas, lo cual hace que mi codigo se vea algo feo por asi decirlo. ¿Hay alguna manera de corregir eso?

¡Soy nuevo!


Código:

Código: [Seleccionar]
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;

/**
 *
 * @author ramos
 */
public class Arturito extends JPanel{
   
    @Override
    public void paint(Graphics g){
        super.paint(g);
        g.setColor(new Color(119, 119, 119 ));
       
        g.fillRect(100,600,20,40);
        g.fillRect(100,380,20,60);
       
        g.fillRect(180,280,20,340);
        g.fillRect(140,440,20,120);
       
        g.fillRect(120,420,60,20);
        g.fillRect(120,360,60,20);
        g.fillRect(120,620,80,20);
        g.fillRect(120,560,20,40);
       
        g.fillRect(200,560,320,20);
        g.fillRect(200,340,320,20);
        g.fillRect(200,240,20,40);
        g.fillRect(220,220,20,20);
       
        g.fillRect(240,200,60,20);
        g.fillRect(300,180,120,20);
        g.fillRect(420,200,60,20);
        g.fillRect(480,220,20,20);
        g.fillRect(500,240,20,40);
        g.fillRect(520,280,20,340);
       
        g.fillRect(540,420,60,20);
        g.fillRect(540,360,60,20);
        g.fillRect(600,380,20,60);
        g.fillRect(560,440,20,120);
        g.fillRect(580,560,20,40);
        g.fillRect(600,600,20,40);
        g.fillRect(520,620,80,20);
       
       
        g.fillRect(290,620,180,20);
       
        g.fillRect(290,600,20,20);
        g.fillRect(450,600,20,20);
       
        g.fillRect(430,580,20,20);
        g.fillRect(310,580,20,20);
       
        g.fillRect(348,220,60,40);
        g.fillRect(320,240,40,20);
       
        g.fillRect(380,500,20,20);
        g.fillRect(360,520,20,20);
       
       
       
       
       
        g.setColor(new Color(7, 22, 179 ));
        g.fillRect(338,480,23,80);
        g.fillRect(400,480,23,80);
       
        g.fillRect(338,480,85,23);
        g.fillRect(338,538,85,23);
       
        g.fillRect(338,368,85,23);
        g.fillRect(338,400,85,23);
       
        g.fillRect(338,435,23,34);
        g.fillRect(400,435,23,34);
       
        g.fillRect(240,220,20,20);
        g.fillRect(460,220,20,20);
       
        g.fillRect(460,220,20,20);
       
        g.fillRect(220,240,20,20);
        g.fillRect(480,240,20,20);
       
        g.fillRect(220,280,40,20);
        g.fillRect(220,320,40,20);
        g.fillRect(400,300,60,20);
       
        g.fillRect(300,300,20,40);
        g.fillRect(480,300,20,40);
        g.fillRect(300,260,120,20);
        g.fillRect(320,200,80,20);
        g.fillRect(300,220,20,50);
        g.fillRect(400,220,20,50);
        g.fillRect(400,320,20,20);
        g.fillRect(440,320,20,20);
       
        g.setColor(Color.red);
        g.fillRect(420,320,20,20);
       
       
       
       
       
    }
   
    public static void main(String[] args){
        JFrame ventana = new JFrame("Arturo");
        Arturito objeto = new Arturito();
        ventana.add(objeto);
        ventana.setSize(700,700);
        ventana.setLocationRelativeTo(null);
        ventana.setVisible(true);
        ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   
    }
}
Título: Re: figura en java
Publicado por: Kabuto en 07 de Febrero 2022, 01:07
Hola.
Muy buena la figura  :D

Pero creo que no habría forma de reducir el código, ni conseguir darle más elegancia.
Al menos a mí no se me ocurre ninguna.

El propósito de fillRect() no es hacer dibujos "complejos", así que inevitablemente, necesitas decenas y decenas de líneas para hacer una figura tan elaborada.

Un saludo.
Título: Re: Java código dibujar figura robot guerra de las galaxias r2-d2 fillRect awt swing
Publicado por: YoanPupo en 26 de Febrero 2024, 16:23
La forma mas "limpia " de hacer esto es usando un archivo de definicion, que describa las operaciones de dibujo, el programa leeria este archivo y dibujaria lo obtenido, el archivo podria ser un txt con cada operacion de dibujo descrita asi
Operacion: parmetro1 :parametro2 :………parametroN

Ejemplo

fillRect: 25 :25 :50: 50
DrawOval: 0: 0: 100: 100

el codigo usaria java.util.Scanner para leer el archivo linea por linea
Luego con java.util.StringTokenizer puedes separar la linea en partes
asi
StringTokenizer cortador =new StringTokenizer(laLinea,":");
esto dividiria la linea usando ":" como separador
Luego obtienes la operacion, que seria el primer token
String operacion=cortador.nextToken()
luego solo seria pasarla por un if else o switch para identificarla, asi un fillRect tendria otros cuatro tokens(x,y,ancho,alto)
Solo obtenlos de cortador, conviertelos a int con Integer.parseInt y ejecuta la operacion
Algo asi
public void drawFile(Graphics gc,File source){
Scanner scan=new Scanner(source);
while(scan.hashNext()){
String line =scan.nextLine();
StringTokenizer cortador=new StringTokenizer(line,":");
If(cortador.countTokens<2)continue;//linea vacia
String operacion=cortador.nextToken().trim();

if(operacion.equals("fillRect")){
int x=Integer.parseInt(cortador.nextToken().trim());
int y=Integer.parseInt(cortador.nextToken().trim());
int ancho=Integer.parseInt(cortador.nextToken().trim());
int alto=Integer.parseInt(cortador.nextToken().trim());
gc.fillRect(x,y,ancho,alto)
}
}
}

asi, el if llevaria un else if para cada operacion que quieras poder usar(drawRect, fillOvall, etc)