elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  ¿ Array de controles en Java ?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿ Array de controles en Java ?  (Leído 4,435 veces)
DarkSigma


Desconectado Desconectado

Mensajes: 331


Nothing is Impossible


Ver Perfil
¿ Array de controles en Java ?
« en: 2 Febrero 2006, 06:27 am »

Muy buenas...

En esta ocacion, escribo por un problema que se me presenta, resulta que ando haciendo un pequeño proyecto en Java en el cual tengo dos opciones:

  • Declaro y creo cerca de 20 controles que en realidad son 4 grupos de 5 controles
  • Creo 4 arrays de controles

Realmente la mas idonea es la segunda sinembargo no puedo crear dichos arrays...

en la clase ejecutable (en este caso la unica) tengo:

Código:
private Button aControl[] = null;

en el contructor tengo:

Código:
Button aControl[] = new Button[4];

y en un metodo fuera de ello tengo:

Código:
for (int x=0; x<5; x++){
  aControl[x].setBackground(Color.blue);
}

Sinembargo cuando ejecuto el programa solo se queda en esa ultima orden sin hacer nada...

Es algun error mio en la declaracion del array? o no es esa la forma de declarar los array?

Espero puedan ayudarme con esto, gracias ;)


En línea



Casidiablo
Desarrollador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.919



Ver Perfil WWW
Re: ¿ Array de controles en Java ?
« Respuesta #1 en: 2 Febrero 2006, 14:51 pm »


La verdad no me cuadra lo de:

Código:
private Button aControl[] = null;

Intenta solo:

Código:
private Button aControl[];

Y después para inicializar hazle normal. De todas formas es mejor si colocas todo el code, con eso podemos depurarlo nosotros. Puede que el error esté en otro lado.

Un saludo!!!


En línea

DarkSigma


Desconectado Desconectado

Mensajes: 331


Nothing is Impossible


Ver Perfil
Ahora es un Button ¬_¬
« Respuesta #2 en: 2 Febrero 2006, 22:51 pm »

Bueno sobre el problema de los arrays tras varias sesiones de ensayo, erro y colgadas de sistema, logre dar con la forma de declararlos, resulta que cuando lo declaraba con = new solo tenia efecto sobre el array mas los elementos internos aun no "existian" tenia que hacerles = new a cada uno que solucione con un for(...), pero resulta que iva bien hasta que me tope con un problemita... mi pequeña aplicacion esta basicamente terminada, ahora les muestro una version alpha de la misma, en la que los botones extrañamente no producen evento, es decir el sistema no me reconoce su click ¿? almenos creo haberle añadido lo necesario pero aun asi no me dan evento click...

Código:
package proy006;

import java.awt.*;

public class Exec extends Frame implements java.awt.event.ActionListener, java.awt.event.ItemListener, java.awt.event.KeyListener, java.awt.event.WindowListener {

  private Label      lblCod       = null;
  private Label      lblPro       = null;
  private Label      lblCnt       = null;
  private Label      lblPre       = null;
  private Label      lblSTotal    = null;

  private Label      LBLxCod[]    = null;
  private Choice     CMBxPro[]    = null; 
  private TextField  TXTxCnt[]    = null;
  private Button     BTNxCnt[]    = null;
  private Label      LBLxPre[]    = null;
  private Label      LBLxSTotal[] = null;

  private Button     btnAdd       = null;
  private Button     btnDel       = null;
 
  private Label      lblTotal     = null;
  private Label      lblcTotal    = null;

  private Label      lblLine      = null;

  private int Scale = 0;
public Exec() {
  super();
  builder();
}
public Exec(String title) {
  super(title);
  builder();
}
public void actionPerformed(java.awt.event.ActionEvent e) {

Object boton = e.getSource();

  if (boton.equals(btnAdd)){
System.out.println("ADD");
  }
   
}
private void builder(){

int x = 0;

  setLayout (null);
  setBackground(Color.lightGray);
  setTitle("Productos");
  setResizable(false);
 
  addWindowListener(this);
 
  /*----------------------------------------------------------------------------*/
 
  Label      lblCod       = new Label("#");
  Label      lblPro       = new Label("Producto");
  Label      lblCnt       = new Label("Cantidad");
  Label      lblPre       = new Label("Precio");
  Label      lblSTotal    = new Label("S.Total");

  Label      lblTotal     = new Label("Total: ");

  Button     btnAdd       = new Button("Añadir");
             btnAdd.addActionListener (this);
             
  Button     btnDel       = new Button("Borrar");
             btnDel.addActionListener (this);
             
  Label      lblLine      = new Label("------------------------------------------------------------------------------------");

  Label      lblcTotal    = new Label();

  Label      LBLxCod[]    = new Label[5];
  Choice     CMBxPro[]    = new Choice[5]; 
  TextField  TXTxCnt[]    = new TextField[5];
  Button     BTNxCnt[]    = new Button[5];
  Label      LBLxPre[]    = new Label[5];
  Label      LBLxSTotal[] = new Label[5];
 
  /*----------------------------------------------------------------------------*/

  lblCod.setBounds    (20,40,20,20);
    lblCod.setAlignment(1);
  lblPro.setBounds    (60,40,100,20);
    lblPro.setAlignment(1);
  lblCnt.setBounds    (180,40,60,20);
    lblCnt.setAlignment(1);
  lblPre.setBounds    (270,40,40,20);
    lblPre.setAlignment(1);
  lblSTotal.setBounds (330,40,40,20);
    lblSTotal.setAlignment(1);

  /*----------------------------------------------------------------------------*/
 
  for (x=0; x<5; x++){
 
    LBLxCod[x]    = new Label     (String.valueOf(x));
    CMBxPro[x]    = new Choice    ();
    TXTxCnt[x]    = new TextField ();
    BTNxCnt[x]    = new Button    ("...");
    LBLxPre[x]    = new Label     ();
    LBLxSTotal[x] = new Label     ();
  }

  for (x=0; x<5; x++){

    LBLxCod[x].setBounds(20,(40*(x+2)),20,20);
      LBLxCod[x].setAlignment(1);
      LBLxCod[x].setBackground(Color.black);
      LBLxCod[x].setForeground(Color.white);
      LBLxCod[x].setEnabled(false);

CMBxPro[x].setBounds(60,(40*(x+2)),100,20);

  Llenar(CMBxPro[x]);
  CMBxPro[x].setEnabled(false);

TXTxCnt[x].setBounds(180,(40*(x+2)),40,20);
  TXTxCnt[x].setEnabled(false);

BTNxCnt[x].setBounds(230,(40*(x+2)),20,20);
  BTNxCnt[x].addActionListener(this);
  BTNxCnt[x].setEnabled(false);

LBLxPre[x].setBounds(270,(40*(x+2)),40,20);
  LBLxPre[x].setBackground(Color.white);
  LBLxPre[x].setEnabled(false);

LBLxSTotal[x].setBounds(330,(40*(x+2)),40,20);
  LBLxSTotal[x].setBackground(Color.white);
  LBLxSTotal[x].setEnabled(false);
  }
 
  /*----------------------------------------------------------------------------*/

  lblLine.setBounds   (20,280,350,10);

  btnAdd.setBounds    (20,300,50,25);
     
  btnDel.setBounds    (80,300,50,25);
   
  lblTotal.setBounds  (270,300,40,20);
 
  lblcTotal.setBounds (330,300,40,20);
    lblcTotal.setBackground(Color.white);
 
  /*----------------------------------------------------------------------------*/
 
  add(lblCod);
  add(lblPro);
  add(lblCnt);
  add(lblPre);
  add(lblSTotal);

  add(lblTotal);
  add(lblcTotal);
  add(lblLine);
  add(btnAdd);
  add(btnDel);

  for (x=0; x<5; x++){
    add(LBLxCod[x]);
    add(CMBxPro[x]);
    add(TXTxCnt[x]);
    add(BTNxCnt[x]);
    add(LBLxPre[x]);
    add(LBLxSTotal[x]);
  }
 
  /*----------------------------------------------------------------------------*/
 
  pack();
  setSize (390,340);
  setLocation (300,200);
  show();

}
public void itemStateChanged(java.awt.event.ItemEvent e) {}
public void keyPressed(java.awt.event.KeyEvent e) {}
public void keyReleased(java.awt.event.KeyEvent e) {}
public void keyTyped(java.awt.event.KeyEvent e) {}
private void Lineas (int Line, boolean Active){

  if (Active == true){
    System.out.println("SI");
  }

  else{
    System.out.println("NO");
  }

}
private void Llenar (Choice Combo){

  Combo.add("Arroz");
  Combo.add("Maiz");
  Combo.add("Trigo");
  Combo.add("Quinua");
  Combo.add("Azucar");
  Combo.add("Leche");

}
public static void main(java.lang.String[] args) {

    Exec Form = new Exec();

}
public void windowActivated(java.awt.event.WindowEvent e) {}
public void windowClosed(java.awt.event.WindowEvent e) {}
public void windowClosing(java.awt.event.WindowEvent e) {

  System.exit(0);

public void windowDeactivated(java.awt.event.WindowEvent e) {}
public void windowDeiconified(java.awt.event.WindowEvent e) {}
public void windowIconified(java.awt.event.WindowEvent e) {}
public void windowOpened(java.awt.event.WindowEvent e) {}
}
En línea



Casidiablo
Desarrollador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.919



Ver Perfil WWW
Re: ¿ Array de controles en Java ?
« Respuesta #3 en: 2 Febrero 2006, 23:10 pm »

Es aconsejable que utilizes clases internas anónimas. Es decir, puedes crear tu propio manejador de eventos, así:

En vez de:


Código:
btnAdd.addActionListener (this);

Pones:

Código:
btnAdd.addActionListener (
              new ActionListener()
              {
              public void actionPerformed(ActionEvent e)
              {
              System.out.println("Presionó ADD");
              }
              }
             );

Con esto estás creando tus eventos independientes. Ojo, esto no lo recomiendo yo... lo dice en la documentación de Java. Lo probé así, y funciona de maravilla.

Un saludo!!
En línea

DarkSigma


Desconectado Desconectado

Mensajes: 331


Nothing is Impossible


Ver Perfil
Re: ¿ Array de controles en Java ?
« Respuesta #4 en: 2 Febrero 2006, 23:23 pm »

Muchas Gracias por la respuesta  ;) ahora lo pruebo y les comento como quedo al final
En línea



Casidiablo
Desarrollador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.919



Ver Perfil WWW
Re: ¿ Array de controles en Java ?
« Respuesta #5 en: 2 Febrero 2006, 23:47 pm »


Ok, otra forma menos elegante, pero igual de efectivo. Es crear una clase aparte, en donde se manejen los enventos. Por ejemplo:

Código:
private class ManejadorEventos implements ActionListener
{
     public void actionPerformed(ActionEvent e)
    {
            /// Y aquí los eventos y eso
    }
}

En este caso los eventos se le indicarían a un objeto así:

Código:
ManejadorEventos manejador=ManejadorEventos();
btnAdd.addActionListener (manejador);

Otro consejo es que comiences a ensalsarte con el paquete javax.swing de Java. Ese en el que se declarán los objetos con una J (JButton, JTextArea, etc...). ¿porqué? porque estos han sido equipados con muchas características que están a años luz de los convencionales (con convencionales me refiero a los del paquete java.awt).

Sin más, un saludo y suerte con el programa.
En línea

DarkSigma


Desconectado Desconectado

Mensajes: 331


Nothing is Impossible


Ver Perfil
Re: ¿ Array de controles en Java ?
« Respuesta #6 en: 3 Febrero 2006, 00:50 am »

Muy buenas nuevamente...

Gracias Casidiablo por las respuestas tan rapidas, ya he conseguido reformatear el codigo con manejadores independientes, me evito de largos if... else if... para buscar controles de ese modo, pero aun asi aunque ya termine el trabajo me quedo una duda espero se pueda responder...

porque no respondia al evento click de la forma:

Código:
btnAdd.addActionListener (this);

?

no pude hacerlo correr asi es decir de la manera digamosles cotidiana por no decir rustica... al igual que el array de botones todos me arrojaban un error en los eventos de java no pude averiguar a que se debia...

y sobre el swim un amigo me habia comentado acerca del swim pero no se que tanto variara la sintaxis del awt aunque no no creo que mucho ya que depende de este ultimo casi siempre, de todos modos le dare un vistaso porque realmente los frames con awt dejan mucho que desear

 ;)
En línea



Casidiablo
Desarrollador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.919



Ver Perfil WWW
Re: ¿ Array de controles en Java ?
« Respuesta #7 en: 7 Febrero 2006, 00:14 am »


Lo de porque no te corría el prgrama, pués ya lo miraré con calma. Por el momento solo decirte que es Swing no swim.

Saludos!!!
En línea

Casidiablo
Desarrollador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.919



Ver Perfil WWW
Re: ¿ Array de controles en Java ?
« Respuesta #8 en: 7 Febrero 2006, 16:47 pm »


Bueno, ya revise el código y el error es un poco tonto. Te explico: Cuando uno va a declarar un objeto en Java, tiene dos opciones:

1. Declarar solamente el objeto, sin inicializarlo, por ej.:

Código:
Button boton;
Lo que es igual a:
Código:
Button boton=null;

ó... 2. Declarar e inicializar, por ej.:
Código:
Button boton=new Button("Botón");
Lo que es igual a:
Código:
Button boton;
boton=new Button("Botón");


Si te fijas bien, despues de haberlo declarado (anteponiendo el nombre de la clase, en este caso Button), a la hora de inicializarlo no es necesario anteponer de nuevo el nombre de la clase (en este caso Button), sino directamente colocarle el new().

Mejor dicho, tu tienes en el código algo así:


Código:
//primero declaras e inicializas en null (esto no es ningún error)
private Button btnAdd = null;

pero, más abajo (en el método Builder()), vuelves a poner Button

Código:
//Aquí está el error
Button btnAdd = new Button("Añadir");

en vez de esto debería ir:

Código:
//Forma correcta
btnAdd = new Button("Añadir");


Espero que hayas entendido.

Saludos!!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
informacion almacenada en un array java
Dudas Generales
fprg 0 2,002 Último mensaje 17 Noviembre 2013, 23:07 pm
por fprg
Ayuda con array java
Java
LoboEnmascarado 1 3,742 Último mensaje 1 Diciembre 2016, 05:45 am
por 0xFer
Duda de array en Java
Java
splendid37 1 3,842 Último mensaje 14 Enero 2018, 18:40 pm
por rub'n
Array de Controles con Eventos en VB.NET
.NET (C#, VB.NET, ASP)
bybaal 3 4,006 Último mensaje 20 Enero 2021, 06:50 am
por bybaal
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines