Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/06/2018, 01:05
TrinityCore
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 424
Antigüedad: 8 años, 8 meses
Puntos: 12
Duda sobre "laminas".

Hola gente, espero esten bien.

Veran, he retomado un curso de java que tenia pendiente, y estoy en la parte de eventos.

El problema con esto es lo siguiente.

Yo tengo estas clases.

Clase Main:
Código Java:
Ver original
  1. package OOP;
  2. import java.awt.*;
  3. import javax.swing.JFrame;
  4. public class Main{
  5.     public static void main(String[] args){
  6.        
  7.         // Frame Position and Icon //
  8.         int w = 600;
  9.         int h = 350;
  10.         int x = (Toolkit.getDefaultToolkit().getScreenSize().width/2)-(w/2);
  11.         int y = (Toolkit.getDefaultToolkit().getScreenSize().height/2)-(h/2);
  12.         Image icon = Toolkit.getDefaultToolkit().getImage("src/favicon.png");
  13.         // Init our Frame //
  14.         Frame MyFrame = new Frame(x, y, w, h, "My First Java Windows", icon, JFrame.EXIT_ON_CLOSE);
  15.         // Extra Opts //
  16.         MyFrame.setResizable(false);
  17.         // Add new Prints //
  18.         Prints FirstPrint = new Prints();
  19.         MyFrame.add(FirstPrint);
  20.         // Show Frame //
  21.         MyFrame.setVisible(true);
  22.        
  23.     }
  24. }

Clase para crear el frame:
Código Java:
Ver original
  1. package OOP;
  2. import java.awt.*;
  3. import javax.swing.*;
  4. public class Frame extends JFrame{
  5.    
  6.     private int x;
  7.     private int y;
  8.     private int width;
  9.     private int height;
  10.    
  11.     public Frame(int x, int y, int w, int h, String title, Image icon, int o){
  12.         this.x = x;
  13.         this.y = y;
  14.         this.width = w;
  15.         this.height = h;
  16.         this.setTitle(title);
  17.         this.setIconImage(icon);
  18.         this.setBounds(this.x, this.y, this.width, this.height);
  19.         this.setDefaultCloseOperation(o);
  20.     }
  21.    
  22. }

Clase para crear laminas:
Código Java:
Ver original
  1. package OOP;
  2. import java.awt.*;
  3. import java.io.File;
  4. import java.io.IOException;
  5. import javax.imageio.ImageIO;
  6. import javax.swing.*;
  7.  
  8. public class Prints extends JPanel{
  9.    
  10.     private Graphics G;
  11.    
  12.     public void paintComponent(Graphics G){
  13.         super.paintComponent(G);
  14.         Graphics2D G2 = (Graphics2D) G;
  15.         Image BG = null;
  16.         try {
  17.             BG = ImageIO.read(new File("src/bg.png"));
  18.             G2.drawImage(BG, 0, 0, null);
  19.         } catch (IOException e) {
  20.             System.out.println("No se pudo mostrar la imagen bg.png");
  21.         }
  22.         Font Title = new Font("Arial", Font.BOLD, 20);
  23.         G2.setColor(new Color(255, 255, 255));
  24.         G2.setFont(Title);
  25.         G2.drawString("New Title", 80, 45);
  26.         G2.drawImage(Toolkit.getDefaultToolkit().getImage("src/favicon.png"), 20, 15, null);
  27.         G2.setColor(new Color(180, 180, 180));
  28.         G2.drawLine(565, 80, 20, 80);
  29.     }
  30.    
  31. }

Bien, se supone que la "Lamina" sera donde uno añadira los componentes y tal como se ve en la clase Main luego se añade con el metodo add

Y el problema viene aqui, cuando me doy cuenta de que para crear una lamina me veo obligado a crear una clase aparte... porque si creo un nuevo objeto de tipo Prints se me crea todo lo que esta dentro del metodo paintComponent

entonces la pregunta es: ¿como puedo usar una clase para crear laminas vacias?
para que vean lo que mas o menos buscaria:
Código Java:
Ver original
  1. Prints FirstPrint = new Prints();
  2. FirstPrint.drawString("Primer lamina", 20, 20);
  3. Prints SecondPrint = new Prints();
  4. SecondPrint.drawString("Segunda lamina", 20, 40);
  5. MyFrame.add(FirstPrint);
  6. MyFrame.add(SecondPrint);

De esa manera yo no me veo forzado a crear una clase para añadir toda una parte de textos y demas y luego otra clase para añadir toda otra parte de botones

Espero que puedan ayudarme, porque no veo el sentido de andar creando clases por cada lamina que necesite.

saludos!