Powrócenie do poprzedniego JFrame bez kasowania wprowadzonych danych.

0

Witam,
Mam następujący problem:
W Javie (NetBeans) tworzę sobie dwa okna (JFrame) o nazwie Okno1, Okno2.

Aby przejść do Okno2 w jButton1 Okno1 wpisuję:

dispose();
Okno2 o2 = new Okno2();
o2.setVisible(true);

Po czym, gdy chcę za pomocą przycisku wrócić do Okna1 wpisuję:

dispose();
Okno1 o1 = new Okno1();
o1.setVisible(true);

Jak powrócić do poprzedniego okna(Okno1), aby były zapamiętane wprowadzone wcześniej dane np. w jTextField1 itp.?

Wiem, że można uzyskać taki efekt za pomocą jednego JFrame a w nim CardLayout > jPanel1, jPanel2. Lecz, to rozwiązanie ma jeden problem - wszystkie Panele mają taki sam rozmiar (niby można przypisać inne wartości po kliknięciu- lecz nie o to w tym chodzi).

Po przejściu do Okno2 mogę pobrać wprowadzone dane z Okno1 jTextField1 poprzez "... .getText()" - lecz po powrocie pole jTextField1 jest już puste.

dodanie znaczników <code class="java"> - @furious programming

0

przekaż referencję jednego okna do drugiego i zamiast dispose wołaj setVisible(false)

0

Działa. Tak to ma wyglądać?, czy może jest jakiś lepszy sposób?

//Do klasy Okno1 dopisuję:
       public static String t1;
       private Okno2 o2;

//Do przycisku, który wyświetla Okno2 i zachowuje tekst z jTextField1.
         dispose();
        //setVisible(false);
        o2 = new Okno2();
        o2.setVisible(true);
        t1 = jTextField1.getText();

//Do klasy Okno2 dopisuję:
        private Okno1 o1;

//Przycisk w Okno2, który wyświetla Okno1 z zachowaniem ustawienia pola tekstowego:
        dispose();
        ///setVisible(false);
        o1 = new Okno1();
        o1.setVisible(true);
        Okno1.jTextField1.setText(Okno1.t1);
0

Nie do końca... W tym momencie na event kliknięcia przycisku tworzysz jedno nowe okne, drugie niszczysz. Lepiej by było abyś wcześniej stworzył oba okna a na kliknięcie jedno okno chował a drugie pokazywał

0

Czy teraz jest poprawnie?:

// Ustawić w Okno1 jTextField1 jako public static
//Do klasy w Okno1:
        public static String t1;


//Przycisk w Okno1:
        setVisible(false);
        new Okno2().setVisible(true);
        t1 = jTextField1.getText();

//Przycisk w Okno2:
    setVisible(false);
    new Okno1().setVisible(true);
    Okno1.jTextField1.setText(Okno1.t1);
1

Tak to mniej więcej powinno wyglądać.

  1. Tworzysz sobie niezależnie dwa okna.
  2. Ustawiasz im referencję na siebie poprzez dopisanie metody setAnotherFrame
  3. Zmieniasz tylko widoczność okien na kliknięcie buttona.

O to Ci chodziło?

public class Okno1 extends javax.swing.JFrame {
    
    private Okno2 okno2;

    public Okno1() {
        initComponents();
    }
    
    public void setAnotherFrame(Okno2 okno2){
        this.okno2 = okno2;
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

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

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

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

        jTextField1.setText("jTextField1");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addGroup(layout.createSequentialGroup()
                                        .addGap(136, 136, 136)
                                        .addComponent(jButton1))
                                .addGroup(layout.createSequentialGroup()
                                        .addGap(46, 46, 46)
                                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addContainerGap(170, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                        .addGap(62, 62, 62)
                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(47, 47, 47)
                        .addComponent(jButton1)
                        .addContainerGap(147, Short.MAX_VALUE))
        );

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

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        setVisible(false);
        okno2.setVisible(true);
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    public static javax.swing.JTextField jTextField1;
    // End of variables declaration                   
}
public class Okno2 extends javax.swing.JFrame {
    
    private Okno1 okno1;

    public Okno2() {
        initComponents();
    }
    
    public void setAnotherFrame(Okno1 okno1){
        this.okno1 = okno1;
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

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

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

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

        jTextField1.setText("jTextField1");

        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(104, 104, 104)
                        .addComponent(jButton1)
                        .addContainerGap(202, Short.MAX_VALUE))
                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(96, 96, 96))
        );
        layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                        .addGap(70, 70, 70)
                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(37, 37, 37)
                        .addComponent(jButton1)
                        .addContainerGap(149, Short.MAX_VALUE))
        );

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

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        setVisible(false);
        okno1.setVisible(true);
    }

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

public class Test {

    public static void main(String[] args) {

        final Okno1 okno1 = new Okno1();
        final Okno2 okno2 = new Okno2();

        okno1.setAnotherFrame(okno2);
        okno2.setAnotherFrame(okno1);

        SwingUtilities.invokeLater(new Runnable() {

            public void run() {
                okno1.setVisible(true);
            }
        });
    }

}

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