Autor
|
Tema: ¿ Array de controles en Java ? (Leído 4,435 veces)
|
DarkSigma
Desconectado
Mensajes: 331
Nothing is Impossible
|
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: private Button aControl[] = null; en el contructor tengo: Button aControl[] = new Button[4]; y en un metodo fuera de ello tengo: 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
|
La verdad no me cuadra lo de:private Button aControl[] = null; Intenta solo: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
Mensajes: 331
Nothing is Impossible
|
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... 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
|
Es aconsejable que utilizes clases internas anónimas. Es decir, puedes crear tu propio manejador de eventos, así:
En vez de:btnAdd.addActionListener (this); Pones: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
Mensajes: 331
Nothing is Impossible
|
Muchas Gracias por la respuesta ahora lo pruebo y les comento como quedo al final
|
|
|
En línea
|
|
|
|
Casidiablo
|
Ok, otra forma menos elegante, pero igual de efectivo. Es crear una clase aparte, en donde se manejen los enventos. Por ejemplo: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í: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
Mensajes: 331
Nothing is Impossible
|
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: 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
|
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
|
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.:Lo que es igual a: ó... 2. Declarar e inicializar, por ej.:Button boton=new Button("Botón"); Lo que es igual a: 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í://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//Aquí está el error Button btnAdd = new Button("Añadir"); en vez de esto debería ir://Forma correcta btnAdd = new Button("Añadir"); Espero que hayas entendido.
Saludos!!!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
informacion almacenada en un array java
Dudas Generales
|
fprg
|
0
|
2,002
|
17 Noviembre 2013, 23:07 pm
por fprg
|
|
|
Ayuda con array java
Java
|
LoboEnmascarado
|
1
|
3,742
|
1 Diciembre 2016, 05:45 am
por 0xFer
|
|
|
Duda de array en Java
Java
|
splendid37
|
1
|
3,842
|
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
|
20 Enero 2021, 06:50 am
por bybaal
|
|