好吧,我现在正遇到这个新手问题。
我有 3个JFrame。 JFrame1打开JFrame2; JFrame2获取单词,然后重新打开JFrame1; JFrame1打开JFrame3,其中包含JFrame2中的单词。
我遇到的问题是关于JFrame3的创建。我的意思是,我知道如何从JFrame2直接转到JFrame3(通过构造函数,通过参数传递我发现的单词)。我想要做的是从JFrame2中取词,将其放入JFrame3 ,但使最后一个看不见(this.setVisible (假))。然后,当我回到JFrame1 时,当我点击按钮时,它将我重定向到JFrame3,其中包含来自JFrame2的单词。我认为这就像[...]。setVisible(true)。
当我点击JFrame1上的按钮时,我不想做的是创建一个新的JFrame3()。因为这样做,我将失去我在JFrame2中获得的所有东西。所以,基本上,我只是想让JFrame3再次可见。无需创建新的并丢失所有内容。
我希望有人能理解我想说的话,并能以某种方式帮助我。 先谢谢你,伙计们。抱歉英语不好。
顺便说一下,我正在使用 Netbeans-Java 。
答案 0 :(得分:1)
我不确定你是否有理由拥有三个独立的JFrame,但如果没有,请尝试查看CardLayout LayoutManager。您可以制作单独的JPanel,而不是制作单独的JFrame,只需将它们添加到此CardLayout即可。 CardLayout in the API
答案 1 :(得分:1)
建议:不要使用NetBeans来生成Swing代码,因为它实际上阻碍了您对Swing的学习,并且让您陷入了恶意习惯,比如不知不觉地弹出JFrame。从教程中学习如何手动编写Swing代码。然后可以在一个对话框窗口中获取您的单词,例如由JOptionPane或JDialog提供,或者通过使用CardLayout交换JPanels。
如果您使用模态对话框,您将知道一个对话框何时完成,因为代码将在对话框设置为可见后立即恢复。然后,您可以在对话框类中查询获取的数据。否则,如果你坚持使用JFrames,你需要将WindowListeners添加到框架中,以便知道它们何时变得不可见,这样做有点困难。
例如,
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);
}
}
答案 2 :(得分:1)
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();
}
});
}
}