Java 动态JFrame-更改JFrame内容

Java 动态JFrame-更改JFrame内容,java,swing,user-interface,jframe,windows-applications,Java,Swing,User Interface,Jframe,Windows Applications,我最近一直在开发基本的软件应用程序,我遇到了一个问题 我现在开发的应用程序有许多不同的菜单和屏幕,我希望JFrame在单击按钮时交替显示这些菜单和屏幕。 考虑到这是大多数应用程序似乎都实现的功能,我可以看到关于这一点的信息少得出奇,这让我想知道我的方法是否完全不适用,不过有一些示例代码说明了这种方法。 因此,我的问题是,a)实现这一目标的最佳方式是什么,b)我当前的代码有什么问题?然而,前一个问题是最重要的 import java.awt.event.ActionEvent; import ja

我最近一直在开发基本的软件应用程序,我遇到了一个问题

我现在开发的应用程序有许多不同的菜单和屏幕,我希望JFrame在单击按钮时交替显示这些菜单和屏幕。

考虑到这是大多数应用程序似乎都实现的功能,我可以看到关于这一点的信息少得出奇,这让我想知道我的方法是否完全不适用,不过有一些示例代码说明了这种方法。

因此,我的问题是,a)实现这一目标的最佳方式是什么,b)我当前的代码有什么问题?然而,前一个问题是最重要的

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Demo {
    JFrame frame;
    JButton nextButton = new JButton ("Next Screen");

    public void setup() {
        frame = new JFrame();
        frame.setVisible(true);
        frame.add(new PanelOne());
        frame.pack();
    }


    public class PanelOne extends JPanel { {
        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        this.add(new JLabel("Label One"));
        this.add(new JLabel("Label Two"));
        this.add(new JLabel("Label Three"));
        this.add(new JLabel("Label Four"));
        this.add(new JLabel("Label Five"));
        JButton button = new JButton("Next Screen");
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                swapPanel();
            }
        });
        this.add(button);
    } }
    public class PanelTwo extends JPanel {{
        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        this.add(new JButton("Button One"));
        this.add(new JButton("Button Two"));
        this.add(new JButton("Button Three"));
        this.add(new JButton("Button Four"));
        this.add(new JButton("Button Five"));
    }}


    protected void swapPanel() {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {

                frame.removeAll();
                frame.add(new PanelTwo());
                frame.invalidate();
                frame.revalidate();

            }

        });

    }

    public static void main (String[] args) {
        Demo demo = new Demo();
        demo.setup();
    }
}

将此用作您的代码

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Demo {
    JFrame frame;
    JButton nextButton = new JButton ("Next Screen");
    PanelOne p = new PanelOne();
    public void setup() {
        frame = new JFrame();
        frame.setVisible(true);

        frame.add(p);
        frame.pack();
    }


    public class PanelOne extends JPanel { {
        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        this.add(new JLabel("Label One"));
        this.add(new JLabel("Label Two"));
        this.add(new JLabel("Label Three"));
        this.add(new JLabel("Label Four"));
        this.add(new JLabel("Label Five"));
        JButton button = new JButton("Next Screen");
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                swapPanel();
            }
        });
        this.add(button);
    } }
    public class PanelTwo extends JPanel {{
        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        this.add(new JButton("Button One"));
        this.add(new JButton("Button Two"));
        this.add(new JButton("Button Three"));
        this.add(new JButton("Button Four"));
        this.add(new JButton("Button Five"));
    }}


    protected void swapPanel() {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {


                frame.remove(p);
                frame.add(new PanelTwo());
                frame.invalidate();
                frame.revalidate();

            }

        });

    }

    public static void main (String[] args) {
        Demo demo = new Demo();
        demo.setup();
    }
}

希望它有帮助……

将此用作您的代码

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Demo {
    JFrame frame;
    JButton nextButton = new JButton ("Next Screen");
    PanelOne p = new PanelOne();
    public void setup() {
        frame = new JFrame();
        frame.setVisible(true);

        frame.add(p);
        frame.pack();
    }


    public class PanelOne extends JPanel { {
        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        this.add(new JLabel("Label One"));
        this.add(new JLabel("Label Two"));
        this.add(new JLabel("Label Three"));
        this.add(new JLabel("Label Four"));
        this.add(new JLabel("Label Five"));
        JButton button = new JButton("Next Screen");
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                swapPanel();
            }
        });
        this.add(button);
    } }
    public class PanelTwo extends JPanel {{
        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        this.add(new JButton("Button One"));
        this.add(new JButton("Button Two"));
        this.add(new JButton("Button Three"));
        this.add(new JButton("Button Four"));
        this.add(new JButton("Button Five"));
    }}


    protected void swapPanel() {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {


                frame.remove(p);
                frame.add(new PanelTwo());
                frame.invalidate();
                frame.revalidate();

            }

        });

    }

    public static void main (String[] args) {
        Demo demo = new Demo();
        demo.setup();
    }
}

希望它有帮助……

将此用作您的代码

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Demo {
    JFrame frame;
    JButton nextButton = new JButton ("Next Screen");
    PanelOne p = new PanelOne();
    public void setup() {
        frame = new JFrame();
        frame.setVisible(true);

        frame.add(p);
        frame.pack();
    }


    public class PanelOne extends JPanel { {
        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        this.add(new JLabel("Label One"));
        this.add(new JLabel("Label Two"));
        this.add(new JLabel("Label Three"));
        this.add(new JLabel("Label Four"));
        this.add(new JLabel("Label Five"));
        JButton button = new JButton("Next Screen");
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                swapPanel();
            }
        });
        this.add(button);
    } }
    public class PanelTwo extends JPanel {{
        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        this.add(new JButton("Button One"));
        this.add(new JButton("Button Two"));
        this.add(new JButton("Button Three"));
        this.add(new JButton("Button Four"));
        this.add(new JButton("Button Five"));
    }}


    protected void swapPanel() {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {


                frame.remove(p);
                frame.add(new PanelTwo());
                frame.invalidate();
                frame.revalidate();

            }

        });

    }

    public static void main (String[] args) {
        Demo demo = new Demo();
        demo.setup();
    }
}

希望它有帮助……

将此用作您的代码

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Demo {
    JFrame frame;
    JButton nextButton = new JButton ("Next Screen");
    PanelOne p = new PanelOne();
    public void setup() {
        frame = new JFrame();
        frame.setVisible(true);

        frame.add(p);
        frame.pack();
    }


    public class PanelOne extends JPanel { {
        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        this.add(new JLabel("Label One"));
        this.add(new JLabel("Label Two"));
        this.add(new JLabel("Label Three"));
        this.add(new JLabel("Label Four"));
        this.add(new JLabel("Label Five"));
        JButton button = new JButton("Next Screen");
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                swapPanel();
            }
        });
        this.add(button);
    } }
    public class PanelTwo extends JPanel {{
        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        this.add(new JButton("Button One"));
        this.add(new JButton("Button Two"));
        this.add(new JButton("Button Three"));
        this.add(new JButton("Button Four"));
        this.add(new JButton("Button Five"));
    }}


    protected void swapPanel() {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {


                frame.remove(p);
                frame.add(new PanelTwo());
                frame.invalidate();
                frame.revalidate();

            }

        });

    }

    public static void main (String[] args) {
        Demo demo = new Demo();
        demo.setup();
    }
}


希望它有帮助……

要交换显示的组件,请使用。还有,问题是什么?谢谢你的回答,我已经把我的问题说得更清楚了。我在问实现我的目标的最佳方法是什么,如果可能的话,解释一下我的方法有什么问题。可能的话。要交换显示的组件,请使用。还有,问题是什么?谢谢你的回答,我已经把我的问题说得更清楚了。我在问实现我的目标的最佳方法是什么,如果可能的话,解释一下我的方法有什么问题。可能的话。要交换显示的组件,请使用。还有,问题是什么?谢谢你的回答,我已经把我的问题说得更清楚了。我在问实现我的目标的最佳方法是什么,如果可能的话,解释一下我的方法有什么问题。可能的话。要交换显示的组件,请使用。还有,问题是什么?谢谢你的回答,我已经把我的问题说得更清楚了。我在问实现我的目标的最好方法是什么,如果可能的话,解释一下我的方法有什么问题。有可能。我发号施令了!稍微调整一下,只使用了frame.remove(frame.getContentPane().getComponent(0));因为我总是有一个父JPanel传递给JFrame。知道frame.removeAll()为什么不工作吗?因为removeAll()会删除整个组件,因此您必须添加一个具有名称的组件,以便可以存储该组件以便稍后删除…非常感谢。如果你不介意的话,我还有一个问题。在我的示例中,我使用了SwingUtilities.invokeLater,但如果没有它,它似乎可以工作。为了awt事件队列而保留它是一种很好的做法吗?看看SwingUtilities.invokeLater做了什么。。。。它在AWT事件调度线程上执行Runnable。这是因为Swing数据结构不是线程安全的,所以为了向程序员提供一种易于实现的方法来防止并发访问它们,Swing设计人员制定了一条规则,即访问它们的所有代码必须在同一线程上运行。。。。所以使用它。。。这是一个很好的实践…如果我的代码帮助了你,那么请接受它作为回答!稍微调整一下,只使用了frame.remove(frame.getContentPane().getComponent(0));因为我总是有一个父JPanel传递给JFrame。知道frame.removeAll()为什么不工作吗?因为removeAll()会删除整个组件,因此您必须添加一个具有名称的组件,以便可以存储该组件以便稍后删除…非常感谢。如果你不介意的话,我还有一个问题。在我的示例中,我使用了SwingUtilities.invokeLater,但如果没有它,它似乎可以工作。为了awt事件队列而保留它是一种很好的做法吗?看看SwingUtilities.invokeLater做了什么。。。。它在AWT事件调度线程上执行Runnable。这是因为Swing数据结构不是线程安全的,所以为了向程序员提供一种易于实现的方法来防止并发访问它们,Swing设计人员制定了一条规则,即访问它们的所有代码必须在同一线程上运行。。。。所以使用它。。。这是一个很好的实践…如果我的代码帮助了你,那么请接受它作为回答!稍微调整一下,只使用了frame.remove(frame.getContentPane().getComponent(0));因为我总是有一个父JPanel传递给JFrame。知道frame.removeAll()为什么不工作吗?因为removeAll()会删除整个组件,因此您必须添加一个具有名称的组件,以便可以存储该组件以便稍后删除…非常感谢。如果你不介意的话,我还有一个问题。在我的示例中,我使用了SwingUtilities.invokeLater,但如果没有它,它似乎可以工作。为了awt事件队列而保留它是一种很好的做法吗?看看SwingUtilities.invokeLater做了什么。。。。它在AWT事件调度线程上执行Runnable。这是因为Swing数据结构不是线程安全的,所以为了向程序员提供一种易于实现的方法来防止并发访问它们,Swing设计人员制定了一条规则,即访问它们的所有代码必须在同一线程上运行。。。。所以使用它。。。这是一个很好的实践…如果我的代码帮助了你,那么请接受它作为回答!稍微调整一下,只使用了frame.remove(frame.getContentPane().getComponent(0));因为我总是有一个父JPanel传递给JFrame。知道frame.removeAll()为什么不工作吗?因为removeAll()会删除整个组件,因此您必须添加一个具有名称的组件,以便可以存储该组件以便稍后删除…非常感谢。如果你不介意的话,我还有一个问题。在我的示例中,我使用了SwingUtilities.invokeLater,但如果没有它,它似乎可以工作。为了awt事件队列而保留它是一种很好的做法吗?看看SwingUtilities.invokeLater做了什么。。。。它在AWT事件调度线程上执行Runnable。这是因为Swing数据结构不是线程安全的,所以为了给程序员提供一种容易实现的防止并发访问它们的方法,Swing des