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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Acciones sobre componentes Swing "externos"
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Acciones sobre componentes Swing "externos"  (Leído 7,500 veces)
gasoft

Desconectado Desconectado

Mensajes: 25


Solo se que nada Se


Ver Perfil WWW
Acciones sobre componentes Swing "externos"
« en: 15 Agosto 2010, 18:08 pm »


Hola buenas tardes amigos ,

Tengo una duda ...

Como ejecutar un  evento sobre un componente Swing de un JFrame desde otro JFrame.

Por Ejemplo de el JFrame1 existe un JLabel , como hacer para que desde un JFrame2 pueda asignarle un nuevo texto al JLabel de JFrame1.


Gracias por su atencion :)


En línea

egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: Acciones sobre componentes Swing "externos"
« Respuesta #1 en: 15 Agosto 2010, 18:11 pm »

No es muy dificil, si lo tienes en un mismo Jar
Solo tienes que tener la referencia del otro objeto que deseas usar


En línea

gasoft

Desconectado Desconectado

Mensajes: 25


Solo se que nada Se


Ver Perfil WWW
Re: Acciones sobre componentes Swing "externos"
« Respuesta #2 en: 15 Agosto 2010, 19:35 pm »


Es que si lo hago como esto :


Código:
JFrame1 JF ;

JF = new JFrame1();

JF.Jlabel.setText("nuevo texto");
No me aplica el nuevo texto al componente al JText

;(
En línea

1mpuls0


Desconectado Desconectado

Mensajes: 1.186


Ver Perfil
Re: Acciones sobre componentes Swing "externos"
« Respuesta #3 en: 15 Agosto 2010, 20:26 pm »

Hola que tal, ando un poco de prisa.

Quieres hacer algo como esto?  :-\

Código
  1. import javax.swing.JFrame;
  2. import javax.swing.JTextField;
  3. import javax.swing.WindowConstants;
  4. import java.awt.FlowLayout;
  5. import java.awt.Dimension;
  6. import java.awt.event.ActionListener;
  7. import java.awt.event.ActionEvent;
  8.  
  9. public class jFrame1 extends JFrame {
  10.  
  11. private JTextField jTextField1;
  12.    private jFrame2 jf2 = new jFrame2();
  13.  
  14.    public jFrame1() {
  15.        iniciarInterfaz();
  16.    }
  17.  
  18.    private void iniciarInterfaz() {
  19.  
  20.        jTextField1 = new javax.swing.JTextField();
  21.  
  22.        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  23.        setTitle("jFrame1");
  24.        setResizable(false);
  25.        setVisible(true);
  26.        getContentPane().setLayout(new FlowLayout());
  27.  
  28.        jTextField1.setText("escribe algo y oprime enter");
  29.        jTextField1.setPreferredSize(new Dimension(200, 25));
  30.        jTextField1.addActionListener(new ActionListener() {
  31.            public void actionPerformed(ActionEvent evt) {
  32.               eventJTextField();
  33.            }
  34.        });
  35.        getContentPane().add(jTextField1);
  36.  
  37.        pack();
  38.    }
  39.  
  40.    private void eventJTextField() {
  41.        jf2.setVisible(true);
  42.        jf2.setText(jTextField1.getText());
  43.    }
  44.  
  45.    public static void main(String args[]) {
  46.        new jFrame1();
  47.    }
  48.  
  49. }
  50.  
  51.  

Código
  1. import javax.swing.JFrame;
  2. import javax.swing.JLabel;
  3. import javax.swing.WindowConstants;
  4. import java.awt.FlowLayout;
  5. import java.awt.Dimension;
  6.  
  7. public class jFrame2 extends JFrame {
  8.  
  9. private JLabel jLabel1;
  10.  
  11.    public jFrame2() {
  12.        initComponents();
  13.    }
  14.  
  15.    private void initComponents() {
  16.  
  17.        jLabel1 = new JLabel();
  18.  
  19.        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  20.        setTitle("jFrame2");
  21.        setResizable(false);
  22.        setLocation(50, 100);
  23.        getContentPane().setLayout(new FlowLayout());
  24.  
  25.        jLabel1.setPreferredSize(new Dimension(200, 25));
  26.  
  27.        getContentPane().add(jLabel1);
  28.  
  29.        pack();
  30.    }
  31.  
  32.    public void setText(String text) {
  33.        jLabel1.setText(text);
  34.    }
  35. }
  36.  
  37.  

Eso entendí xD.

Un saludo
« Última modificación: 15 Agosto 2010, 20:52 pm por Darhius » En línea

abc
Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Acciones sobre componentes Swing "externos"
« Respuesta #4 en: 15 Agosto 2010, 22:15 pm »

Pues tienes que aceder a la clase del frame que quieres modificar y desde ahi declarando la variable del objeto del control swing como static y public la modificas (static no es explicitamente necesario).

Saludos
En línea

gasoft

Desconectado Desconectado

Mensajes: 25


Solo se que nada Se


Ver Perfil WWW
Re: Acciones sobre componentes Swing "externos"
« Respuesta #5 en: 17 Agosto 2010, 04:45 am »

Muchas gracias por sus respuesta,

la verdad estuve analizando mi pregunta y esta mal formulada. YA que efectivamente lo que ustedes me respondieron funciona. Pero en mi escenario no sirve simplemente declararlo , instanciarlo y ya. :(

Les "dibujare" mi escenario para que se comprenda mejor

JFrame
  |
  |-> JTabbedPane                                                               |--->JButton(Boton)
                  |                 |-> JPanel(JPanel1)--|
                  |-> JPanel ---                                                |---> public void desactivar(){ Boton.setEnable(false);}
                  |                 |-> JPanel
                  |
                  |                 |-> JPanel
                  |-> JPanel ---
                                    |-> JPanel(JPanel2)



...

bueno la cuestion es como hacer para que desde el JPanel2 pueda  invocar a la función desactivar() que se encuentra en el Panel1 para que me desactive el JButton del Panel1.

Como mencione anteriormente ... no sirve...


Código
  1.  
  2. //Codigo dentro de JPanel2
  3.  
  4. JPanel1 JP1;
  5. JP1 = new JPanel1();
  6. JP1.desactivar();
  7.  
  8.  


El código anterior no me saca ningún error pero no me efectúa ningún cambio sobre el GUI :(.

Espero puedan ayudarme a encontrar con  la solución :D
En línea

Leyer


Desconectado Desconectado

Mensajes: 786


leyer@elhacker.net


Ver Perfil WWW
Re: Acciones sobre componentes Swing "externos"
« Respuesta #6 en: 17 Agosto 2010, 05:08 am »

Claro que ese code no funciona ya que es una nueva instancia del panel no la original.

Algunas soluciones

1. Puedes usar modificadores de acceso static o protected dependiendo.

2. Creas una variables privada dentro del jframe del panel1, ahora cuando agregas el panel panel2 le pasas por constructor el panel1 y lo guardas como referencia dentro de este. y así llamar el método desactivar();

3. Creas una variable privada dentro del jframe del panel1, y creas un método en jframe llamado desactivar() que cumpla la función que quieres, luego al panel2 le pasas por constructor el jframe y y así llamar al método desactivar() por la referencia del jframe.

Un saludo.
« Última modificación: 17 Agosto 2010, 05:31 am por LEYER » En línea

Gallu

Desconectado Desconectado

Mensajes: 247



Ver Perfil
Re: Acciones sobre componentes Swing "externos"
« Respuesta #7 en: 17 Agosto 2010, 17:29 pm »

Tu respuesta es implementar un Gestor de JPanels, dicho gestor tendrá referencias a TODAS las JPanels agregadas al JTabbedPane , con ello , simplemente llamarás a las funciones del gestor para modificar el comportamiento de cualquier JPanel disponible en tu aplicación
Código
  1.  |
  2.  |-> JTabbedPane                                                              
  3.                  |                 |-> JPanel(JPanel1)--|-------|
  4.                  |-> JPanel ---                                 |              
  5.                  |                 |-> JPanel(JPanelx)----------|
  6.                  |                                              |----->GestorTabs
  7.                  |                 |-> JPanel(JPanely)----------|  
  8.                  |-> JPanel ---                                 |
  9.                                    |-> JPanel(JPanel2)--|-------|
  10.  
  11.  

Bueno , te dejo un ejemplo que escribi, basándome en tu código , espero que te sirva, lo que hace es que toma el texto del textbox del primer JPanel y lo muestra en el label del segundo.
Código
  1. import javax.swing.JLabel;
  2. import java.awt.Dimension;
  3. import javax.swing.JPanel;
  4.  
  5. public class Ventana2 extends JPanel  implements Gestionable  {
  6.  
  7.    private JLabel jLabel1;
  8.    private Gestor gestor;
  9.    public Ventana2(Gestor gestor) {
  10.        this.gestor = gestor;
  11.        initComponents();
  12.    }
  13.  
  14.    private void initComponents() {
  15.        jLabel1 = new JLabel();
  16.        jLabel1.setPreferredSize(new Dimension(200, 25));
  17.        jLabel1.setText("Hola a todos");
  18.        this.add(jLabel1);
  19.  
  20.    }
  21.  
  22.    public void setText(String text) {
  23.        jLabel1.setText(text);
  24.    }
  25.  
  26.    public Gestor getGestor(){
  27.        return this.gestor;
  28.    }
  29. }
  30.  
Código
  1. import javax.swing.JTextField;
  2. import java.awt.Dimension;
  3. import javax.swing.JButton;
  4. import javax.swing.JPanel;
  5.  
  6.  
  7. public class Ventana1  extends JPanel implements Gestionable {
  8.  
  9.  
  10.   private JTextField jTextField1;
  11.   private Gestor gestor;
  12.   JButton boton = new JButton("Presiona aqui");
  13.  
  14.    public Ventana1(Gestor gestor) {
  15.        this.gestor = gestor;
  16.        iniciarInterfaz();      
  17.    }
  18.  
  19.    private void iniciarInterfaz() {
  20.        GestorTabs gesorTabs = new GestorTabs(this);
  21.        jTextField1 = new javax.swing.JTextField();
  22.        jTextField1.setText("escribe algo y oprime enter");
  23.        jTextField1.setPreferredSize(new Dimension(200, 25));
  24.        jTextField1.addActionListener(gesorTabs);
  25.        boton.addActionListener(gesorTabs);
  26.        boton.setName("boton enviar");
  27.        this.add(jTextField1);
  28.        this.add(boton);
  29.    }
  30.    public JTextField getCajaTexto(){
  31.        return this.jTextField1;
  32.    }
  33.  
  34.    public Gestor getGestor(){
  35.        return this.gestor;
  36.    }
  37.  
  38. }
  39.  
  40.  
Código
  1. public interface Gestionable {
  2.  
  3.    public Gestor getGestor();
  4. }
  5.  
  6.  

Código
  1. import java.awt.event.ActionEvent;
  2. import java.awt.event.ActionListener;
  3.  
  4. class GestorTabs implements ActionListener{
  5. Gestionable ventana;
  6.  
  7. public GestorTabs(Gestionable panel){
  8. this.ventana = panel;
  9. }
  10.        public void actionPerformed(ActionEvent e){
  11.            if(ventana instanceof Ventana1){
  12.                Ventana1 ven1 = (Ventana1)ventana;
  13.                this.ejecutarVentana1(ven1, ven1.getCajaTexto().getText());
  14.            }
  15.  
  16.        }
  17.        /**
  18.          *
  19.          * @param ven
  20.          * @param textoMostrar
  21.          */
  22.        public void ejecutarVentana1(Ventana1 ven, String textoMostrar){
  23.            Gestor ges = this.ventana.getGestor();
  24.            Ventana2 vent2 = (Ventana2)ges.getPanel("ventana 2");
  25.            vent2.setText(textoMostrar);
  26.        }
  27.  
  28. }
  29.  
Código
  1. import java.awt.Component;
  2. import java.awt.Container;
  3. import javax.swing.JPanel;
  4.  
  5.  
  6. public class Gestor {
  7.        Container container ;
  8.  
  9. public Gestor(Container conta){
  10. this.container = conta;
  11. }
  12.  
  13.  
  14.        /**
  15.          * Devuelve el panel especificado por nombre
  16.          * @param name
  17.          * @return
  18.          */
  19.        public JPanel getPanel(String name){
  20.            Component []componentes = this.container.getComponents();
  21.            JPanel panel;
  22.            for(Component conp : this.container.getComponents()){
  23.                panel = (JPanel)conp;
  24.                if(name.equals(panel.getName())){
  25.                    return panel;
  26.                }
  27.            }
  28.            return null;
  29.        }
  30.  
  31. }
  32.  
Código
  1.  
  2. import javax.swing.JFrame;
  3. import javax.swing.JTabbedPane;
  4.  
  5.  
  6. public class Principal extends JFrame {
  7.  
  8.  
  9.    public static void main(String[] args) {
  10.       Principal prin = new Principal();
  11.       JTabbedPane panel = new JTabbedPane();
  12.       Gestor gestor = new Gestor(panel);
  13.       Ventana1 vent = new Ventana1(gestor);
  14.       Ventana2 vent2 = new Ventana2(gestor);
  15.       vent.setName("ventana 1");
  16.       vent2.setName("ventana 2");
  17.       panel.addTab("Ventana 1" ,vent);
  18.       panel.addTab("Ventana 2",vent2);      
  19.       panel.setBounds(200, 5000, 6000 ,7000);
  20.       panel.setVisible(true);
  21.       prin.getContentPane().add(panel);
  22.       prin.setVisible(true);
  23.       prin.setBounds(500, 200, 500 ,500);
  24.       prin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  25.    }
  26.  
  27. }
  28.  

« Última modificación: 17 Agosto 2010, 19:27 pm por Didacso » En línea

Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
gasoft

Desconectado Desconectado

Mensajes: 25


Solo se que nada Se


Ver Perfil WWW
Re: Acciones sobre componentes Swing "externos"
« Respuesta #8 en: 17 Agosto 2010, 20:19 pm »


Gracias amigos por sus respuestas , en la noche voy a probar sus soluciones y les cuento (Y).

Gracias :D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Monitorizar "acciones" de Windows
Dudas Generales
NXS 2 2,672 Último mensaje 15 Febrero 2011, 22:25 pm
por NXS
Componentes Swing y Eventos. Recopilacion Metodos.
Java
Mitsu 5 7,381 Último mensaje 18 Noviembre 2013, 11:55 am
por egyware
Google quiere acotar las acciones del ISIS a la "dark web"
Noticias
wolfbcn 0 1,327 Último mensaje 20 Enero 2016, 20:29 pm
por wolfbcn
Antigua publicidad de pc o componentes de "alta gama"
Foro Libre
engel lex 7 3,272 Último mensaje 17 Octubre 2016, 18:28 pm
por basickdagger
Swing: Modificador De Ámbito De Componentes
Java
Skar.2007 1 2,323 Último mensaje 12 Mayo 2021, 16:23 pm
por rub'n
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines