Ich möchte Wörter in einem JFrame2 erhalten, zurück zu JFrame1 und dann mit diesen Wörtern zu JFrame3 gehen. Wie kann ich es tun?

  • Nun, ich habe gerade dieses Problem mit Neulingen.

    Ich habe 3 JFrames. JFrame1 öffnet JFrame2; JFrame2 ruft die Wörter ab und öffnet JFrame1 erneut. JFrame1 öffnet JFrame3 mit den in JFrame2 übernommenen Wörtern .

    Das Problem, das ich habe, betrifft die Erstellung von JFrame3. Ich meine, ich weiß, wie man von JFrame2 direkt zu JFrame3 wechselt (über den Konstruktor, Parameter übergeben, die gefundenen Wörter). Was ich versuche zu tun, ist die Worte von JFrame2 zu nehmen, es in JFrame3 zu setzen, aber macht diesen letzten unsichtbar (this.setVisible) (falsch)). Und , wenn ich zu JFrame1 zurück gehe , und wenn ich auf eine Schaltfläche klicke , wird mich mit den Wörtern von JFrame2 zu JFrame3 umgeleitet. Ich denke, es wäre so etwas wie [...]. SetVisible (true).

    Was ich nicht tun möchte, ist ein neues JFrame3 () zu erstellen, wenn ich Klicken Sie auf die Schaltfläche in JFrame1. Dadurch würde ich alle Dinge verlieren, die ich in JFrame2 bekam. Im Grunde möchte ich den JFrame3 wieder sichtbar machen. Ohne ein neues erstellen zu müssen und alle meine Sachen zu verlieren.

    Ich hoffe, jemand kann verstehen, was ich versuche zu sagen und mir irgendwie helfen kann. Vielen Dank im Voraus Jungs Entschuldigung für das schlechte Englisch.

    Übrigens verwende ich Netbeans-Java .

    22 November 2011
    mKorbel
3 answers
  • JFrame1 öffnet JFrame2; JFrame2 ruft die Wörter ab und öffnet anschließend JFrame1; JFrame1 öffnet JFrame3 mit den in JFrame2 aufgenommenen Wörtern.

     import java.awt.FlowLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.*;
    
    public class MultiFrames implements ActionListener
    {
        private JFrame frame1, frame2, frame3;
        private String message;
        private JTextField txtFiled;
        private JButton btn1, btn2;
        private JLabel lbl;
        private boolean flag = false;
    
        private static final String BUTTON1_COMMAND = "btn1";
        private static final String BUTTON2_COMMAND = "btn2";
    
        public MultiFrames()
        {
            frame1 = new JFrame("JFrame #1");
            frame2 = new JFrame("JFrame #2");
            frame3 = new JFrame("JFrame #3");
    
            frame1.setLayout(new FlowLayout());
            frame2.setLayout(new FlowLayout());
            frame3.setLayout(new FlowLayout());
    
            frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame1.setSize(200, 100);
            frame1.setLocationRelativeTo(null);
    
            frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame2.setSize(200, 100);
            frame2.setLocationRelativeTo(null);
    
            frame3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame3.setSize(200, 100);
            frame3.setLocationRelativeTo(null);
    
            txtFiled = new JTextField(10);
            frame2.add(txtFiled);
    
            lbl = new JLabel();
            frame3.add(lbl);
    
            btn1 = new JButton("Open JFrame #2");
            btn2 = new JButton("Re-Open JFrame #1");
    
            btn1.addActionListener(this);
            btn1.setActionCommand(BUTTON1_COMMAND);
            btn2.addActionListener(this);
            btn2.setActionCommand(BUTTON2_COMMAND);
    
            frame1.add(btn1);
            frame2.add(btn2);
    
            frame1.setVisible(true);
        }
    
        @Override
        public void actionPerformed(ActionEvent e)
        {
            String s = e.getActionCommand();
    
            if(s.equals(BUTTON1_COMMAND))
            {
                if(!flag)
                {
                    frame1.setVisible(false);
                    frame2.setVisible(true);
                    flag = true;
                }
                else
                {
                    frame1.setVisible(false);
                    frame3.setVisible(true);
                    lbl.setText("The word is: " + message);
                }
            }
            else if(s.equals(BUTTON2_COMMAND))
            {
                frame2.setVisible(false);
                frame1.setVisible(true);
                message = txtFiled.getText();
                btn1.setText("Open JFrame #3");
            }
        }
    
        public static void main(String[] args)
        {
            SwingUtilities.invokeLater(new Runnable()
            {
                @Override
                public void run()
                {
                    new MultiFrames();
                }
            });
        }
    }
     
    22 November 2011
    Eng.FouadBrian Agnew
  • Ich bin mir nicht sicher, ob Sie einen Grund haben, drei separate JFrames zu haben. Wenn nicht, schauen Sie sich den CardLayout LayoutManager an. Anstatt separate JFrames zu erstellen, würden Sie separate JPanels erstellen und diese einfach zu diesem CardLayout hinzufügen. CardLayout im API

    22 November 2011
    Tyler
  • Empfehlung: Verwenden Sie keine NetBeans, um Ihren Swing-Code zu generieren, da er das Lernen von Swing tatsächlich behindert und Sie in schlechte Gewohnheiten wie JFrames springen lässt. Lernen Sie aus den Tutorials, wie Sie Swing von Hand programmieren. Dann erhalten Sie Ihre Wörter vielleicht in einem Dialogfenster, das von einem JOptionPane oder JDialog bereitgestellt wird, oder indem Sie JPanels mit einem CardLayout austauschen.

    Wenn Sie modale Dialoge verwenden, wissen Sie wann Ein Dialog ist beendet, da der Code direkt nach dem Einblenden des Dialogs fortgesetzt wird. Dann können Sie die Dialogklasse nach den erhaltenen Daten abfragen. Wenn Sie weiterhin mit JFrames arbeiten, müssen Sie den Frames WindowListener hinzufügen, um zu wissen, wann sie unsichtbar gemacht wurden, was etwas schwieriger ist.

    Für Beispiel:

     import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    
    public class FrameFoolery {
       private static void createAndShowGui() {
          JFrame frame = new JFrame("Frame Foolery");
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.getContentPane().add(new MainPanel(frame));
          frame.pack();
          frame.setLocationRelativeTo(null);
          frame.setVisible(true);
       }
    
       public static void main(String[] args) {
          SwingUtilities.invokeLater(new Runnable() {
             public void run() {
                createAndShowGui();
             }
          });
       }
    }
    
    class MainPanel extends JPanel {
       private String words = "";
       private JDialog dialog1;
       private JDialog dialog2;
       private Panel1 panel1;
       private Panel1 panel2;
    
       public MainPanel(final JFrame frame) {
          add(new JButton(new AbstractAction("Show Dialog 1") {
             public void actionPerformed(ActionEvent ae) {
                if (panel1 == null) {
                   panel1 = new Panel1();
                   dialog1 = new JDialog(frame, "Dialog 1", true);
                   dialog1.getContentPane().add(panel1);
                   dialog1.pack();
                   Point pt = frame.getLocation();
                   dialog1.setLocation(pt.x - 100, pt.y - 100);
                }
                dialog1.setVisible(true);
                words = panel1.getWords();
             }
          }));
          add(new JButton(new AbstractAction("Show Dialog 2") {
             public void actionPerformed(ActionEvent ae) {
                if (panel2 == null) {
                   panel2 = new Panel1();
                   dialog2 = new JDialog(frame, "Dialog 2", true);
                   dialog2.getContentPane().add(panel2);
                   dialog2.pack();
                   dialog2.setLocationRelativeTo(frame);
                   Point pt = frame.getLocation();
                   dialog2.setLocation(pt.x + 100, pt.y + 100);
                }
                panel2.setWords(words);
                dialog2.setVisible(true);
             }
          }));
       }
    }
    
    class Panel1 extends JPanel {
       private JTextField wordsField = new JTextField(20);
    
       Panel1() {
          add(new JLabel("Words:"));
          add(wordsField);
          add(new JButton(new AbstractAction("OK") {
             public void actionPerformed(ActionEvent e) {
                Window win = SwingUtilities.getWindowAncestor(Panel1.this);
                win.setVisible(false);
             }
          }));
       }
    
       public String getWords() {
          return wordsField.getText();
       }
    
       public void setWords(String words) {
          wordsField.setText(words);
       }
    
    
    }
     
    22 November 2011
    Hovercraft Full Of Eels