Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Se añaden botones solo

Estas en el tema de Se añaden botones solo en el foro de Java en Foros del Web. Hola gente, espero estén bien. Verán, quisiera saber porque al minimizar la ventana se añaden botones nuevamente. Es decir, cuando minimizo tengo 1 botón, y ...
  #1 (permalink)  
Antiguo 25/02/2018, 18:29
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 424
Antigüedad: 9 años, 3 meses
Puntos: 12
Se añaden botones solo

Hola gente, espero estén bien.

Verán, quisiera saber porque al minimizar la ventana se añaden botones nuevamente.
Es decir, cuando minimizo tengo 1 botón, y al mostrar la ventana nuevamente se agrega 1, cada vez que hago esto se añade otro botón y no se porque ocurre esto...

Dejare los códigos aquí debajo.

Clase Frame en cargada de crear la ventana.
Código Java:
Ver original
  1. package user_interface;
  2. import java.awt.Image;
  3. import java.awt.Toolkit;
  4. import java.io.File;
  5. import java.io.IOException;
  6.  
  7. import javax.imageio.ImageIO;
  8. import javax.swing.JFrame;
  9. class Frame extends JFrame{
  10.  
  11.     private JFrame window;
  12.     private Image Icon;
  13.     private String Title;
  14.     private int[] Position = {0, 0};
  15.     private int[] Dimension = {0, 0};
  16.     private boolean Visible;
  17.     private boolean Resizable;
  18.     private int Operation;
  19.     private String Aligment;
  20.     private Image IconImage;
  21.    
  22.     public Frame(String Icon, String Title, int W, int H, String Aligment, boolean Visible, boolean Resizable, int Operation){
  23.         this.Icon = this.GetIcon(Icon);
  24.         this.Title = Title;
  25.         this.Dimension[0] = W;
  26.         this.Dimension[1] = H;
  27.         this.Aligment = Aligment;
  28.         this.Resizable = Resizable;
  29.         this.Operation = Operation;
  30.         this.Visible = Visible;
  31.         this.CreateWindow();
  32.     }
  33.    
  34.     public Image GetIcon(String Path){
  35.         try{
  36.             this.IconImage = ImageIO.read(new File(Path));
  37.         }catch(IOException e){
  38.             System.out.println("No se pudo localizar la imagen: "+Path);
  39.         }
  40.         return this.IconImage;
  41.     }
  42.    
  43.     public void CreateWindow(){
  44.         this.window = new JFrame(this.Title);
  45.         this.window.setIconImage(this.Icon);
  46.         this.window.setSize(this.Dimension[0], this.Dimension[1]);
  47.         this.SetPosition(this.Aligment);
  48.         this.window.setResizable(this.Resizable);
  49.         this.window.setDefaultCloseOperation(this.Operation);
  50.         this.window.add(new Elements());
  51.         this.window.setVisible(this.Visible);
  52.     }
  53.    
  54.     public void SetPosition(String pos){
  55.         switch(pos){
  56.             case "LEFT-CENTER":
  57.             case "CENTER-LEFT":
  58.                 this.Position[1] = ((Toolkit.getDefaultToolkit().getScreenSize().height/2)-(this.Dimension[1]/2));
  59.             break;
  60.             case "LEFT-BOTTOM":
  61.             case "BOTTOM-LEFT":
  62.                 this.Position[1] = ((Toolkit.getDefaultToolkit().getScreenSize().height)-(this.Dimension[1]));
  63.             break;
  64.             case "TOP-CENTER":
  65.             case "CENTER-TOP":
  66.                 this.Position[0] = ((Toolkit.getDefaultToolkit().getScreenSize().width/2)-(this.Dimension[0]/2));
  67.             break;
  68.             case "TOP-RIGHT":
  69.             case "RIGHT-TOP":
  70.                 this.Position[0] = ((Toolkit.getDefaultToolkit().getScreenSize().width)-(this.Dimension[0]));
  71.             break;
  72.             case "RIGHT-CENTER":
  73.             case "CENTER-RIGHT":
  74.                 this.Position[0] = ((Toolkit.getDefaultToolkit().getScreenSize().width)-(this.Dimension[0]));
  75.                 this.Position[1] = ((Toolkit.getDefaultToolkit().getScreenSize().height/2)-(this.Dimension[1]/2));
  76.             break;
  77.             case "RIGHT-BOTTOM":
  78.             case "BOTTOM-RIGHT":
  79.                 this.Position[0] = ((Toolkit.getDefaultToolkit().getScreenSize().width)-(this.Dimension[0]));
  80.                 this.Position[1] = ((Toolkit.getDefaultToolkit().getScreenSize().height)-(this.Dimension[1]));
  81.             break;
  82.             case "BOTTOM-CENTER":
  83.             case "CENTER-BOTTOM":
  84.                 this.Position[0] = ((Toolkit.getDefaultToolkit().getScreenSize().width/2)-(this.Dimension[0]/2));
  85.                 this.Position[1] = ((Toolkit.getDefaultToolkit().getScreenSize().height)-(this.Dimension[1]));
  86.             break;
  87.             case "CENTER-CENTER":
  88.                 this.Position[0] = ((Toolkit.getDefaultToolkit().getScreenSize().width/2)-(this.Dimension[0]/2));
  89.                 this.Position[1] = ((Toolkit.getDefaultToolkit().getScreenSize().height/2)-(this.Dimension[1]/2));
  90.             break;
  91.         }
  92.         this.window.setLocation(this.Position[0], this.Position[1]);
  93.     }
  94.    
  95.     public void SetVisible(boolean visible){
  96.         this.window.setVisible(visible);
  97.     }
  98.    
  99.     public void SetDimension(int W, int H){
  100.         this.Dimension[0] = W;
  101.         this.Dimension[1] = H;
  102.         this.window.setSize(W, H);
  103.     }
  104. }

Clase Elements encargada de crear los componentes de la ventana.
Código Java:
Ver original
  1. package user_interface;
  2. import java.awt.Color;
  3. import java.awt.Font;
  4. import java.awt.Graphics;
  5. import java.awt.Image;
  6. import java.awt.event.ActionEvent;
  7. import java.awt.event.ActionListener;
  8. import java.io.File;
  9. import java.io.IOException;
  10.  
  11. import javax.imageio.ImageIO;
  12. import javax.swing.JButton;
  13. import javax.swing.JPanel;
  14.  
  15. class Elements extends JPanel implements ActionListener{
  16.  
  17.     private Image Image;
  18.    
  19.    
  20.     public void paintComponent(Graphics G){
  21.         super.paintComponent(G);
  22.         this.AddButton("My First JButton");
  23.        
  24.     }
  25.    
  26.     public void AddText(String T, int X, int Y, String FT, int FS, int FZ, Color C, Graphics G){
  27.         G.setFont(new Font(FT, FS, FZ));
  28.         G.setColor(C);
  29.         G.drawString(T, X, Y);
  30.     }
  31.    
  32.     public void AddImage(String Patch, int X, int Y, int W, int H, Graphics G){
  33.         try{
  34.             this.Image = ImageIO.read(new File(Patch));
  35.             G.drawImage(this.Image, X, Y, W, H, null);
  36.         }catch (IOException e){
  37.             System.out.println("No se pudo localizar la imagen solicitada: "+Patch);
  38.         }
  39.     }
  40.    
  41.     public void AddButton(String T){
  42.         JButton button = new JButton(T);
  43.         button.addActionListener(this);
  44.         this.add(button);  
  45.     }
  46.    
  47.     public void actionPerformed(ActionEvent e){
  48.        
  49.     }
  50.    
  51. }

Clase Init encargada de iniciar el programa.
Código Java:
Ver original
  1. package user_interface;
  2. import java.awt.Color;
  3. import java.awt.Graphics;
  4. import javax.swing.JFrame;
  5.  
  6. public class init{
  7.     public static void main(String[] args){
  8.         Frame window = new Frame("C:/AppServ/www/images/DefaultIcon.png", "Mi Primera Ventana Java", 400, 250, "CENTER-CENTER", true, false, JFrame.EXIT_ON_CLOSE);
  9.     }
  10. }

Espero que me sepan decir cual es el problema y porque ocurre esto, para tenerlo en cuenta.

Gracias de antemano!
  #2 (permalink)  
Antiguo 26/02/2018, 01:59
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 16 años, 2 meses
Puntos: 188
Respuesta: Se añaden botones solo

Cada vez que se hace un resize se llama automaticamente al metodo paintComponent para adaptar la pantalla al nuevo tamaño.

Debes controlar si el boton ya existe. Mi consejo para una solución rápida es que hagas el botón un atributo de la clase y solo lo añadas una vez si es null.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 26/02/2018, 09:51
 
Fecha de Ingreso: agosto-2015
Ubicación: Rosario - Argentina
Mensajes: 424
Antigüedad: 9 años, 3 meses
Puntos: 12
Respuesta: Se añaden botones solo

Con esto ya me vale:
Código Java:
Ver original
  1. if(this.Button == null){
  2.             this.AddButton("My First JButton");
  3.             this.AddButton("My First JButton");
  4.             this.AddButton("My First JButton");
  5.         }

Código Java:
Ver original
  1. public void AddButton(String T){
  2.         this.Button = new JButton(T);
  3.         this.Button.addActionListener(this);
  4.         this.add(this.Button); 
  5.     }
No se si sea la mejor solución, pero para seguir con el curso sin inconvenientes me vale!

Nuevamente gracias por la solución +1

Etiquetas: botones, class, panel
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:21.