Jak przesłać String z JTextField do innej klasy

0

Witam posiadam dwie klasy dziedziczące po JFrame w pierwszej jest GUI (tabela przycisk oraz przykladowe dane do tabeli).
W drugiej sa pola do wpisania tekstu chciałbym przesłać podany tekst do metody umieszczonej w klasie pierwszej(po wciśnięciu przycisku).
Domyslam się żeby korzystac z metodu umieszczonej w innej klasie musze po niej dziedziczyc ale dziedzicze juz po JFrame. Nie wiem czy mam próbować stworzyc jakiś interface? czy mozna rozwiącać mój problem jakoś prosciej?

Próbowałem dostac sie do tej metody przez utworzenie obiektu tej klasy
W komentarzach sa zapisane moje próby

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GUI;

import java.awt.BorderLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Stack;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author luppo
 */
public class UzytkownikGui extends JFrame{
    private final JTable tabela;
    Vector<Vector<String>> dane;
    public UzytkownikGui() throws HeadlessException {

        Vector<String> kolumny = new Stack<>();
        kolumny.add("Id");
        kolumny.add("Imie");
        kolumny.add("Nazisko");
        kolumny.add("Pesel");
        
        dane = new Vector<>();
        dane.addElement(dodajRekord("1", "adfsas", "asdfa", "safdasdfsa"));
        dane.addElement(dodajRekord("1", "adfsas", "asdfa", "safdasdfsa"));
        
        DefaultTableModel model = new DefaultTableModel(dane, kolumny);
        tabela = new JTable(model);
        JScrollPane scroll = new JScrollPane(tabela);
        add(scroll);        
        JButton dodajWiersz = new JButton("Dodaj nowy wiersz");
        dodajWiersz.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                new dodajUzytkownikaGui();
                UzytkownikGui.this.tabela.addNotify();
            }
        });
        add(dodajWiersz,BorderLayout.SOUTH);
        initComponent();
    }
    
    public Vector<String> dodajRekord(String id,String imie, String nazwisko,String pesel){
        Vector< String > pojedynczyWiersz = new Vector<>();
        pojedynczyWiersz.add(id);
        pojedynczyWiersz.add(imie);
        pojedynczyWiersz.add(nazwisko);
        pojedynczyWiersz.add(pesel);
        return pojedynczyWiersz;
    }
    
    private void initComponent(){
        setDefaultCloseOperation(3);
        pack();
        setVisible(true);
    }
    
    public static void main (String[] arga){
        new UzytkownikGui();
        
    }
    
}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GUI;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 *
 * @author luppo
 */
public class dodajUzytkownikaGui extends JFrame {
    private JPanel panel;
    private JTextField poleImie;
    private JLabel imieLabel;
    private JLabel naziskoLabel;
    private TextField poleNazwosko;
    private JTextField polePesel;
    private JLabel peselLabel;
    private JButton dodajUzytkownika;
    private UzytkownikGui uzytkownik;
    public dodajUzytkownikaGui() {

        initComponent();
    }

    private void initComponent() {
        panel = new JPanel(new GridLayout(3, 2));
        imieLabel = new JLabel("imie");
        poleImie = new JTextField();
        naziskoLabel = new JLabel("nazwisko :");
        poleNazwosko = new TextField();
        peselLabel= new JLabel("pesel : ");
        polePesel = new JTextField();
        panel.add(imieLabel);
        panel.add(poleImie);
        panel.add(naziskoLabel);
        panel.add(poleNazwosko);
        panel.add(peselLabel);
        panel.add(polePesel);
        add(panel);
        dodajUzytkownika = new JButton("Dodaj Uzytkownika");
        dodajUzytkownika.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("10"+ poleImie.getText()+ poleNazwosko.getText()+ polePesel.getText());
                //dodajUzytkownikaGui.this.uzytkownik.dane.addElement(dodajRekord("10", poleImie.getText(), poleNazwosko.getText(), polePesel.getText()));
                //dodajUzytkownikaGui.this.uzytkownik.dane.addElement(dodajUzytkownikaGui.this.uzytkownik.dodajRekord("10", poleImie.getText(), poleNazwosko.getText(), polePesel.getText()));                
            }
        });
        add(dodajUzytkownika,BorderLayout.SOUTH);
        
        setLocationRelativeTo(null);
        pack();
        setVisible(true);
    }
    

}

Po wcisniesu przycisku wyswietla mi wszystko z System.out.println(); oraz wyjątek java.lang.NullPointerException

Z góry dziękuje za pomoc

0

Stwórz sobie classe która bedzie trzmała wartosci Imie, Nazwisko, ... jako statyczna i vector przerób wtedy
Vector<NAzwaStruktury> dane;

0
  1. Przekaż do okna dodajUzytkownikaGui, referencję do głównego okna.
  2. Poinformuj pierwsze okno, że dane się zmieniły.
public class UzytkownikGui extends JFrame{
    private final JTable tabela;
    Vector<Vector<String>> dane;
    private dodajUzytkownikaGui dopisywanie;
    DefaultTableModel model = null;
    public UzytkownikGui() throws HeadlessException {
 
        Vector<String> kolumny = new Stack<>();
        kolumny.add("Id");
        kolumny.add("Imie");
        kolumny.add("Nazisko");
        kolumny.add("Pesel");
 
        dane = new Vector<>();
        dane.addElement(dodajRekord("1", "adfsas", "asdfa", "safdasdfsa"));
        dane.addElement(dodajRekord("1", "adfsas", "asdfa", "safdasdfsa"));
 
        model = new DefaultTableModel(dane, kolumny);
        ...
	dopisywanie = new dodajUzytkownikaGui(this);
        dodajWiersz.addActionListener(new ActionListener() {
 
            @Override
            public void actionPerformed(ActionEvent e) {
                dopisywanie.setVisible(true);
                UzytkownikGui.this.tabela.addNotify();
            }
         });
...
    private UzytkownikGui uzytkownik;
    public dodajUzytkownikaGui(UzytkownikGui uzytkownik) {
	this.uzytkownik = uzytkownik;
        initComponent();
    }
...
        dodajUzytkownika.addActionListener(new ActionListener() {
 
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("10"+ poleImie.getText()+ poleNazwosko.getText()+ polePesel.getText());
                uzytkownik.dane.addElement(uzytkownik.dodajRekord("10", poleImie.getText(), poleNazwosko.getText(), polePesel.getText()));
		uzytkownik.model.fireTableDataChanged();              
            }
        });
        add(dodajUzytkownika,BorderLayout.SOUTH);
 
        setLocationRelativeTo(null);
        pack();
        //setVisible(true);
0

Możesz też na upartego wstawić statyczny getter dla instancji okna, bo z założenia główne okno będzie chyba raczej singletonem także statyczny getter instancji zapewniłby Ci dostęp do tego okna z każdego poziomu programu

0

Dziekuje bardo wszystkim za odpowiedz. Sprawdziłem odpowiedz bogdans_nz wszystko działa wielkie dzięki.

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