3

我在Java's Swing这里使用来制作 UI 应用程序。我创建了一个带有一些按钮的 JFrame。当我点击这个按钮时,我想要一个新的 JFrame,在这个地方有一些不同的内容。但是,我不想在这里加载新的 JFrame。

actionPerformed(ActionEvent obj)我知道的一种方法是在第一个 JFrame 中的按钮方法中将第二个 JFrame 的可见性设置为 True 。但它再次加载了一个新的 JFrame,我不希望这样。

public class FirstUI extends JFrame {
    JButton but1;

    public FirstUI(){
        but1= new JButton("Click here");
        add(but1);

    XYZ obj= new XYZ():
    but1.addActionListener(obj);
    }

    public class XYZ implements ActionListener{
        public void actionPerformed(ActionEvent obj1){

             // WHAT TO DO HERE  
        } 
    }
}

我只想要一个 JFrame,当我们点击不同的按钮时,它的内容会发生变化。我怎样才能做到这一点?

4

4 回答 4

11

看一下CardLayout,这将允许切换框架的内容:

CardLayout 对象是容器的布局管理器。它将容器中的每个组件都视为一张卡片。一次只能看到一张卡片,并且容器充当一叠卡片。添加到 CardLayout 对象的第一个组件是容器首次显示时的可见组件。

有关示例,请参见如何使用 CardLayout 。

于 2013-03-26T08:09:31.213 回答
3

您还可以JFrame在运行时动态操作您的内容。您可以使用add(...), remove(...),removeAll(...)方法来添加和删除内容,就像在显示框架之前一样。完成后,您需要调用修改后的容器的方法revalidate()repaint()方法,以使一切安定下来并正确显示。

但是,我认为正确的解决方案取决于您尝试实施的实际概念。如果您想添加或删除几个 GUI 元素以强调功能,那么正确的方法是按照我概述的那样操作容器。但是,如果您想要根据系统状态(不超过 2-3 个)略有不同的 GUI,那么CardLayout将是一个更合适的选择

于 2013-03-26T08:22:21.183 回答
0

您可以将父类的可见性设置为 false。

然后,您一次只能获得一个包含所需内容的帧。

您必须在按钮的单击事件中创建框架的静态对象和 setVisible(fase)。

前任。

public class demo  {
static JFrame jf;
public static void main(String a[])
{
    JButton b=new JButton("OK");
    JPanel jp=new JPanel();
    jf=new JFrame();
    jf.setVisible(true);
    jf.setSize(200,200);
    jf.add(jp);
    jp.add(b);

    b.addActionListener( new ActionListener(){
    public void actionPerformed(ActionEvent e)
    {
     jf.setVisible(false);
     JFrame f= new JFrame();
     f.setSize(200,200);
     f.setVisible(true);
    }
    });
}

}

它会帮助你。

你明白我的意思了吗?

于 2013-03-26T08:23:25.303 回答
0

一种方法是更改​​ JFrame 的内容窗格。这基本上是一个JPanel。您可以通过frame.setContentPane( <your new panel> );
第二种方法来做到这一点,即做@Peter Lang 所做的事情。那就是使用可以更改不同内容组的布局管理器。

于 2013-03-26T08:24:50.107 回答