Swing 2 okna i przekazywanie zmiennych

0

Witam
Głowię się już od jakiegoś nad jednym zagadnieniem. Tworzę 2 okna. 1 okno zawiera Jlabel i przycisk. Przycisk ten otwiera kolejne okno, które posiada dwa pola jTextField. Jest tam również przycisk, który ma za zadanie przypisać zmiennym String imie, nazwisko ciąg znaków z tych pól. Kolejne czynności to utworzenie zmiennej referencyjnej okna pierwszego i wywołanie prostej metody Jlabel.setText(); ta funkcja w żaden sposób nie chce mi zmienić w oknie 1 JLabel. Co robię nie tak ? Podczas wykonywania kodu nie występują błędy.
W zasadzie mogę rozszerzyć 2 okno o klasę JDialog ale mi chodzi bardziej o zrozumienie dlaczego to nie działa na takim modelu jakim prezentuję. Będę wdzięczny za podpowiedź.

Główna klasa

 package test;
public class Test {
    public static void main(String[] args) {
         java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new Okno().setVisible(true);
            }
        });
    }

} 

pierwsze okno

package test;
public class Okno extends javax.swing.JFrame {
    public Okno() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setText("Ten tekst ma się zmienić");

        jButton1.setText("Nowe okno");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(129, 129, 129)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap(156, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(40, 40, 40)
                .addComponent(jLabel1)
                .addGap(54, 54, 54)
                .addComponent(jButton1)
                .addContainerGap(169, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new Dodaj().setVisible(true);
            }
        });
    }

    
    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    public javax.swing.JLabel jLabel1;
    // End of variables declaration
}

 

drugie okno

package test;
public class Dodaj extends javax.swing.JFrame {
    public Dodaj() {
        initComponents();
        setLocationRelativeTo(null);
    }
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jTextField1 = new javax.swing.JTextField();
        jTextField2 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jTextField1.setText("imie");

        jTextField2.setText("nazwisko");

        jButton1.setText("Zapisz");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(141, 141, 141)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(186, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(28, 28, 28)
                .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jButton1)
                .addContainerGap(180, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    //deklaracja zmiennych
    Okno okno;
    String imie,nazwisko;
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        imie = jTextField1.getText();
        nazwisko = jTextField2.getText();
        okno = new Okno();
        okno.jLabel1.setText(imie + " " + nazwisko);  //Ta metoda nie zmienia wartości Jlabel w Okno();
        dispose();
    }

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    // End of variables declaration
}

0

To co napisałeś woła o pomstę do nieba. Lekcja na dzis: MVC.
A brakuje ci pewnie jakiegoś repaint() wywołanego na tym drugim oknie.

0

Nie wiedziałem od czego zacząć... Na pewno poczytam o MVC. A czy mógłbyś pokazać przykład takiego zastosowania? okno.repaint() też nie zmienia mi wartości JLabel;

0

Dobra, rzuciłem okiem na ten kod i jest gorzej niż myślałem. Przecież ty tworzysz tam NOWE okienko! Jak niby oczekujesz że coś się zmieni w tym starym okienku? o_O

package test;

public class Okno extends javax.swing.JFrame {
    public Okno() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setText("Ten tekst ma się zmienić");

        jButton1.setText("Nowe okno");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            @Override
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(
                layout.createSequentialGroup()
                        .addGap(129, 129, 129)
                        .addGroup(
                                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                        .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
                                                Short.MAX_VALUE)
                                        .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
                                                Short.MAX_VALUE)).addContainerGap(156, Short.MAX_VALUE)));
        layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(
                layout.createSequentialGroup().addGap(40, 40, 40).addComponent(jLabel1).addGap(54, 54, 54).addComponent(jButton1)
                        .addContainerGap(169, Short.MAX_VALUE)));

        pack();
    }// </editor-fold>

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        new Dodaj(this).setVisible(true); //przekazujemy okienku Dodaj referencje do okienka Okienko
    }

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    public javax.swing.JLabel jLabel1;
    // End of variables declaration
}
package test;

public class Dodaj extends javax.swing.JFrame {
    private final Okno okno;

    public Dodaj(Okno okno) {
        this.okno = okno;
        initComponents();
        setLocationRelativeTo(null);
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jTextField1 = new javax.swing.JTextField();
        jTextField2 = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jTextField1.setText("imie");

        jTextField2.setText("nazwisko");

        jButton1.setText("Zapisz");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            @Override
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(
                layout.createSequentialGroup()
                        .addGap(141, 141, 141)
                        .addGroup(
                                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 73,
                                                javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 73,
                                                javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 73,
                                                javax.swing.GroupLayout.PREFERRED_SIZE)).addContainerGap(186, Short.MAX_VALUE)));
        layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(
                layout.createSequentialGroup()
                        .addGap(28, 28, 28)
                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
                                javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,
                                javax.swing.GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18).addComponent(jButton1)
                        .addContainerGap(180, Short.MAX_VALUE)));

        pack();
    }// </editor-fold>

    // deklaracja zmiennych
    String imie, nazwisko;

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        imie = jTextField1.getText();
        nazwisko = jTextField2.getText();
        okno.jLabel1.setText(imie + " " + nazwisko); // nie tworzymy nowego okienka tylko korzystamy z istniejącego
        dispose();
    }

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    // End of variables declaration
}
0

No i o to chodziło, dzięki. Jeszcze tylko muszę zrozumieć jak to działa. :)

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