Java - 如何使JFrame的内容出现在同一个Window而不是多个窗口中

时间:2014-03-15 14:09:33

标签: java swing user-interface jframe

我是java的新手,并且已经达到了它的高级水平,我在GUI控件中遇到了问题,我点击了一个按钮,当点击它时会打开一个这样的新窗口:

     JButton b = new JButton("Open New Window");
     b.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent e) {
     Window w = new Window();
     w.setVisible(true);
     }
     });

这个窗口包含其他对象,但我一直在考虑按这样的方式制作按钮,而不是打开一个新的JFrame,它打开同一个窗口中的所有内容而不打开一个新窗口,老实说,我不知道该怎么做我可以得到一些专业的帮助

3 个答案:

答案 0 :(得分:1)

我认为你想要这种情况的卡片布局。这里有一些代码可以指出你正确的方向。

class MyFrame extends JFrame {

    public MyFrame() {

        JComponent allMyStuff = new JComponent();
        JComponent allMyOtherStuff = new JComponent();

        this.getContentPane().setLayout(new CardLayout());

        this.getContentPane().add(allMyStuff, "1");
        this.getContentPane().add(allMyOtherStuff, "2");

        CardLayout cl = (CardLayout) (this.getContentPane().getLayout());
        cl.show(this.getContentPane(), "1");

        JButton b = new JButton("Open New Window"); //add somewhere to first compoonent
        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                CardLayout cl = (CardLayout) (this.getContentPane().getLayout());
                cl.show(this.getContentPane(), "2");
            }
        });
    }
}

我怀疑代码运行但通常它有这个想法。你在一个面板中有东西,在另一个面板中有东西,你只想在两者之间切换。当然需要在第一个面板(allMyStuff)中添加按钮。

答案 1 :(得分:0)

我不清楚按下按钮时你想要在GUI中显示什么,但是你应该考虑创建不同的JPanel“视图”并使用CardLayout在GUI中交换这些视图。 / p>

例如,查看这些StackOverflow问题和答案:

答案 2 :(得分:0)

在您介绍的动作侦听器中,您可以访问实例变量。因此,如果需要,可以向GUI中添加更多元素。我做了一个小型演示,也许这就是你想要做的。为了使您的GUI更好,您应该考虑使用布局管理器。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;

public class GUI {

JFrame frame; 
JButton btn;
JButton compToAdd;

public GUI() {
    frame = new JFrame("Testwindow");
    frame.setSize(500, 500);
    frame.setLayout(null);

    btn = new JButton("test btn");
    btn.setBounds(20, 20, 200, 200);


    btn.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            compToAdd = new JButton("new Button");
            compToAdd.setBounds(20, 220, 200, 200);
            frame.add(compToAdd);
            frame.repaint();
        }
    });

    frame.add(btn);
    frame.setVisible(true);
}

public static void main(String[] args) {
    GUI gui = new GUI();
}

}