Jak przekazać dane z jednego obiektu JFrame do drugiego?

0

Witam,

mam problem z przekazaniem danych z jednego obiektu JFrame do drugiego.
napisałem prosty edytor tekstu który po wybraniu opcji ZAPISZ powinien wyświetlić nowe okno w którym podaje się nazwę pliku w którym ma być zapisany edytowany tekst.
wszystko niby działa ale po wybraniu opcji ZAPISZ (z nowego okienka) nie powstaje żądany plik a jedyne co uzyskujemy to seria komunikatów o błędach na konsoli.

ma ktoś pomysł w czym może być problem?
może w niewłaściwy sposób próbuję przekazać dane z jednego JFrame do drugiego?

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

public class Aplikacja extends JFrame{
	JTextArea text;
	JButton zapisz, wczytaj, wyczysc;
	File file;
	RandomAccessFile source;
	String line, line2;
	JButton prz1;
	JTextField text1;
	JLabel et1;

	ActionListener al1 = new ActionListener(){
		public void actionPerformed(ActionEvent ev){
			if(ev.getSource() == prz1){
				line2 = text1.getText();
				save();
			}
		}
	};


	ActionListener al = new ActionListener(){
		public void actionPerformed(ActionEvent e){
			if(e.getSource() == zapisz){
				wprowadzanieNazwy();
			if(e.getSource() == wczytaj){
				text.setText(line);								
			}
			if(e.getSource() == wyczysc){
				text.setText(" ");
			}
		}
	};

	Aplikacja(){
		setLayout(null);
		setSize(1000, 900);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		text = new JTextArea();
		text.setBounds(10, 10, 870, 680);
		add(text);

		zapisz = new JButton("Zapisz");
		zapisz.setBounds(890, 10, 100, 40);
		zapisz.addActionListener(al);
		add(zapisz);

		wczytaj = new JButton("Wczytaj");
		wczytaj.setBounds(890, 60, 100, 40);
		wczytaj.addActionListener(al);
		add(wczytaj);

		wyczysc = new JButton("Wyczyść");
		wyczysc.setBounds(890, 110, 100, 40);
		wyczysc.addActionListener(al);
		add(wyczysc);

	}

	public void wprowadzanieNazwy(){
		JFrame nazwa = new JFrame();
		nazwa.setLayout(null);
		nazwa.setSize(500, 300);
		nazwa.setVisible(true);
		nazwa.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		et1 = new JLabel("Wprowadź nazwę pliku do zapisu");
		et1.setBounds(150, 50, 300, 30);
		nazwa.add(et1);

		prz1 = new JButton("Zapisz");
		prz1.setBounds(150, 130, 100, 30);
		nazwa.add(prz1);
		prz1.addActionListener(al1);
		
		text1 = new JTextField();
		text1.setBounds(150, 90, 100, 30);
		nazwa.add(text1);
	}

	public void save(){
		file = new File(line2);
		try{
			if(file.createNewFile()){
				System.out.println("Utworzony został plik" + line2);
			}
		}
		catch(IOException ex){
			System.out.println("Nie można utworzyć pliku" + line2);
		}
		try{
			source = new RandomAccessFile(file, "rw");
		}
		catch(FileNotFoundException exc){
			System.out.println("Nie można odnaleźć pliku" + file);
		}
		line = text.getText();
		try{
			source.writeBytes(line);
		}
		catch(IOException exce){
			System.out.println("Błąd zapisu");
		}
	}
		

	public static void main(String args[]){
		SwingUtilities.invokeLater(new Runnable(){
			public void run(){
				new Aplikacja();
			}
		});
	}
}
0

Wydaje mi się, że nie powinieneś tworzyć nowej ramki. Ja bym raczej to zrobił korzystając https://docs.oracle.com/javase/7/docs/api/javax/swing/JOptionPane.html

0

A ja, zamiast otwierać JFrame, skorzystałbym z klasy JFileChooser

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