我想在JFrame2中获取单词,回到JFrame1,然后带着这些单词去JFrame3.我怎么能做到呢?



嗯,我现在遇到了这个新手问题。

我有3 JFrames。JFrame1打开JFrame2;JFrame2获取单词,然后重新打开JFrame1;JFrame1使用JFrame2中的单词打开JFrame3。

我遇到的问题是关于JFrame3的创建。我的意思是,我知道如何从JFrame2直接转到JFrame3(通过构造函数,通过参数传递我找到的单词)。我要做的是从JFrame2取单词,把它放在JFrame3,但是使最后一个不可见 (this. setvisible (false))。然后,当我回到JFrame1,当我点击按钮时,它将我重定向到带有JFrame2中的单词的JFrame3。我想应该是[…]. setvisible (true).

我不想做的是当我点击JFrame1上的按钮时创建一个新的JFrame3()。因为这样做,我将失去在JFrame2中得到的所有东西。基本上,我只是想让JFrame3再次可见。而不需要创建一个新的,并且丢失我所有的东西。

我希望有人能理解我想说的话,并能以某种方式帮助我。先谢谢你们了。对不起,我的英语不好。

顺便说一下,我用 Netbeans-Java

JFrame1打开JFrame2;JFrame2获取单词,然后重新打开JFrame1;JFrame1使用JFrame2中的单词打开JFrame3。

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();
            }
        });
    }
}

我不确定您是否有理由拥有三个独立的jframe,但如果没有,请尝试查看CardLayout LayoutManager。不是制作单独的jframe,而是制作单独的jpanel,并将它们添加到CardLayout中。API中的CardLayout

建议:不要使用NetBeans生成Swing代码,因为它实际上会阻碍您对Swing的学习,并使您养成诸如随意弹出jframe之类的坏习惯。从教程中学习如何手工编写Swing代码。然后在JOptionPane或JDialog提供的对话框窗口中获取您的单词,或者将JPanels与CardLayout交换。

如果你使用模态对话框,你会知道当一个对话框已经完成,代码将恢复后,对话框设置为可见。然后,您可以查询对话框类以获取数据。否则,如果你坚持使用JFrames,你就需要在frame中添加windowlistener来知道它们何时被设置为不可见,这有点困难。

例如

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);
   }

}

相关内容

  • 没有找到相关文章

最新更新