wymiana inf. miedzy dwoma JFrame'ami

0

czesc, mam program, ktory sklada sie powiedzy z glownego GUI i jest tam przycisk 'wprowadz' po jego kliknieciu wyskakuje okienko (nowa ramka) w ktorym wprowadzam sobie rozne dane - kilka JTextField. No i teraz chce zeby te dane z pol tekstowych powedrowaly do glownej ramki;

i jeszcze jest tak ze po kliknieciu 'wprowadz', okno glownego GUI staje sie nieaktywne - dispose(false), a po zamknieciu ramki staje sie z powrotem aktywne.

wszystko byloby wporzadaku gdybym umiescil tworzenie tych ramek w obrebie jedenj klasy pod zdarzeniami przyciskow, ale mam kilka takich przyciskow i niezalenych "malych" ramek, co powoduje ze kod staje sie strasznie nieczytelny i trudny w modyfikowaniu. dlatego tez postanowilem to porozbijac na kilka klas w kazdej klasie tworze "mala" ramke, ale pozniej mam problem glownie z tym dispose dla glownego GUI.

prosze wytlumaczcie mi to, tylko lopatologicznie bo dopiero zaczynam przygode z java

pozdrawiam!

0

Tu masz przyklad.

http://4programmers.net/Forum/viewtopic.php?id=95044

pozdrawiam
johny

0

znalazlem ten przyklad ale nadal mi nie wychodzi, wyskakuja mi bledy przy probie przeslania danych miedzy ramakami

podaje kod ktory dziala i jak byscie mogli uzupelnic go o wysylanie informacji z ramki pomocniczej do ramki glownej

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test{
	public static void main(String[] args){
		new RamkaProgramuGlownego();
	}
}

class RamkaProgramuGlownego extends JFrame{
	private JTextField poleTxtGL;
	private JTextArea duzePoleTxtGL;
	private JButton przyciskGL;
	RamkaPomocnicza ramkaPomocnicza;
	
	public RamkaProgramuGlownego(){
		super("RamkaProgramuGlownego");
		setSize(300,300);
		setResizable(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				
		poleTxtGL = new JTextField(10);
		duzePoleTxtGL = new JTextArea(3,10);
		przyciskGL = new JButton("Klik");
				
		JPanel panel = new JPanel();
		panel.add(poleTxtGL);
		panel.add(duzePoleTxtGL);
		panel.add(przyciskGL);
		
		setContentPane(panel);
		setVisible(true);

		przyciskGL.addActionListener( new ActionListener(){
			public void actionPerformed(ActionEvent evt){
				ramkaPomocnicza = new RamkaPomocnicza(poleTxtGL,duzePoleTxtGL);
			}
		});	

	}
}

class RamkaPomocnicza extends JFrame{
	private JTextField poleTxtPom;// = new JTextField(10);
	private JTextArea duzePoleTxtPom;// = new JTextArea(3,10);
	private JButton przyciskPom;
	
	public RamkaPomocnicza(JTextField poleTxtPom,JTextArea duzePoleTxtPom){
		super("RamkaPomocnicza");
		setSize(300,300);
		setResizable(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		this.poleTxtPom = poleTxtPom;
		this.duzePoleTxtPom = duzePoleTxtPom; 
		
		poleTxtPom = new JTextField(10);
		duzePoleTxtPom = new JTextArea(3,10);
		przyciskPom = new JButton("Przeslij");
		
		JPanel panel = new JPanel();
		panel.add(poleTxtPom);
		panel.add(duzePoleTxtPom);
		panel.add(przyciskPom);
				
		setContentPane(panel);
		setVisible(true);
				
		przyciskPom.addActionListener( new ActionListener(){
			public void actionPerformed(ActionEvent evt){
				//przesylanie informacji ???
			}
		});	
	}
}
0
class RamkaPomocnicza extends JFrame{
        private JTextField poleTxtPom;// = new JTextField(10);
        private JTextArea duzePoleTxtPom;// = new JTextArea(3,10);
		
		private JTextField pole1z1Frame;
		private JTextArea pole2z1Frame;
		
        private JButton przyciskPom;
       
        public RamkaPomocnicza(JTextField p1,JTextArea p2){
                super("RamkaPomocnicza");
                setSize(300,300);
                setResizable(true);
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               
                this.pole1z1Frame = p1;
                this.pole2z1Frame = p2;
               
                this.poleTxtPom = new JTextField(10);
                this.duzePoleTxtPom = new JTextArea(3,10);
                przyciskPom = new JButton("Przeslij");
               
                JPanel panel = new JPanel();
                panel.add(poleTxtPom);
                panel.add(duzePoleTxtPom);
                panel.add(przyciskPom);
                               
                setContentPane(panel);
                setVisible(true);
                               
                przyciskPom.addActionListener( new ActionListener(){
                        public void actionPerformed(ActionEvent evt){
                                
				przekazDane();	
								
                        }
                });       
        }
		
	private void przekazDane() {
		pole1z1Frame.setText(poleTxtPom.getText());
		pole2z1Frame.setText(duzePoleTxtPom.getText());
	}
}
0

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test{
        public static void main(String[] args){
        	    JFrame frame = new JFrame();
        	    frame.add(new RamkaProgramuGlownego());
        	    frame.setSize(300,300);
        	    frame.setVisible(true);
        	    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
}

class RamkaProgramuGlownego extends JPanel{
        public JTextField poleTxtGL;
        private JTextArea duzePoleTxtGL;
        private JButton przyciskGL;
        public int x;
        public RamkaPomocnicza ramkaPomocnicza;
        
       
        public RamkaProgramuGlownego(){
                                            
                poleTxtGL = new JTextField(10);
                duzePoleTxtGL = new JTextArea(3,10);
                przyciskGL = new JButton("Klik");
                               
                add(poleTxtGL);
                add(duzePoleTxtGL);
                add(przyciskGL);
                ramkaPomocnicza = new RamkaPomocnicza(this);
                
                                  
                przyciskGL.addActionListener( new ActionListener(){
                        public void actionPerformed(ActionEvent evt){
                        	ramkaPomocnicza.show();
                        }
                });       

        }
}

class RamkaPomocnicza extends JFrame{
        private JTextField poleTxtPom;// = new JTextField(10);
        private JTextArea duzePoleTxtPom;// = new JTextArea(3,10);
        private JButton przyciskPom;
        public RamkaProgramuGlownego pm;
                 
        public RamkaPomocnicza(RamkaProgramuGlownego panelPomocniczy){
                setSize(300,300);
                setResizable(true);
                setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                
                pm = panelPomocniczy;
                              
                poleTxtPom = new JTextField(10);
                duzePoleTxtPom = new JTextArea(3,10);
                przyciskPom = new JButton("Przeslij");
                               
                JPanel panel = new JPanel();
                panel.add(poleTxtPom);
                panel.add(duzePoleTxtPom);
                panel.add(przyciskPom);
                               
                setContentPane(panel);
                                                               
                przyciskPom.addActionListener( new ActionListener(){
                        public void actionPerformed(ActionEvent evt){
                            String wiadomosc = duzePoleTxtPom.getText();
                            pm.poleTxtGL.setText(wiadomosc);
                        }
                });       
        
        }          



}

any nawiazac komunikacje miedzy dwoma klasami musisz miec wspolne podloze - nalezy przekazac obiekt, w tym wypadku przekazujemy obiekt klasy RamkaProgramuGlownego (moglbys tez przekazac same pola tekstowe co chyba byloby latwiejsze ^^ jednak wersja z panelem powinna lepiej zobrazowac zagadnienie), robimy to tworzac obiekt klasy ramkaPomocnicza
ramkaPomocnicza = new RamkaPomocnicza(this);
z parametrem this (przekazuje samego siebie)

nalezy zmodyfikowac konstruktor klasy ramkaPomocnicza tak, aby mogla "odebrac obiekt"
public RamkaPomocnicza(RamkaProgramuGlownego panelPomocniczy)

nastepnie, zachowujemy odebrany obiekt do zmiennej pm
pm = panelPomocniczy;

jako, ze obiekt klasy ramkaPomocnicza jest tworzony w konstruktorze klasy RamkaProgramuGlownego wystarczy jedynie ja pokazac

przyciskGL.addActionListener( new ActionListener(){
                        public void actionPerformed(ActionEvent evt){
                        	ramkaPomocnicza.show();
                        }
                });       

skoro swiezo stworzony obiekt klasy ramkaPomocnicza ma dostep do wszystkich pol obiektu klasy RamkaProgramuGlownego wystarczy zmienic wartosc jednego z jego pol, w tym wypadku poleTxtGL

przyciskPom.addActionListener( new ActionListener(){
                        public void actionPerformed(ActionEvent evt){
                            String wiadomosc = duzePoleTxtPom.getText();
                            pm.poleTxtGL.setText(wiadomosc);
                        }
                });       

0

wilekie dzieki Panowie za kod i wyjasnienie, juz rozumiem jak to dziala

Pozdrawiam!

1 użytkowników online, w tym zalogowanych: 0, gości: 1