桌面应用程序 - 如何动态创建和销毁表单

时间:2010-10-08 18:21:43

标签: java frames dynamic destroy

我正在使用java为桌面创建一个小型加密应用程序。

我正在使用JFrames(导入javax.swing.JFrame)和Oracle Linux下的JDeveloper 11g。

我希望有一个“欢迎”表单/框架供用户选择 他们的加密方法,然后选择方法, 我想动态创建适当的表单 选择加密方法,也破坏/释放/ dispose() 欢迎表格。当用户完成加密时, 他们应该关闭框架/形式(通过点击 右上角的x - 或使用退出按钮或任何 方法)和动态重建欢迎框架 并出现。

我尝试过各种各样的东西 - btnEncode_actionPerformed(ActionEvent e) 然后this.dispose() - 我摆弄了this_windowClosed(WindowEvent e) 并且dispose(),但似乎没有任何效果。

使用setVisibl(true / false)的解决方法也是可以接受的 这个阶段 - 这一整天都在破坏我的头脑。这是很 在Delphi中很容易做到!

TIA和rgs,

...保

2 个答案:

答案 0 :(得分:0)

这样的事情通常会起作用:(注意我没有测试过这个)

public class WelcomeMsg extends JFrame
.
.
.
public void btnContinue_actionPerformed(ActionEvent e)
{
    this.dispose();
    SwingUtilities.invokeLater(new Runnable(){ new JFrameAppropriateWindow(args) });
}

其中btnContinue是欢迎表单上的“继续”按钮,JFrameAppropriateWindow是您要显示的下一帧,具体取决于用户的选择。 Args是你需要传递的任何参数。

准备好后,您可以简单地处理当前帧并重新启动WelcomeMsg的实例

答案 1 :(得分:0)

我将这个简单的例子放在一起,根据用户的选择创建和显示一个面板。

public class Window extends JFrame {

public Window() {
    this.setLayout(new BorderLayout());
    JComboBox encryptionCombobox = new JComboBox();
    encryptionCombobox.addItem("foo");
    encryptionCombobox.addItem("bar");
    //...
    encryptionCombobox.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            // find choices and the correct panel
            JPanel formPanel = new JPanel();
            formPanel.setOpaque(true);
            formPanel.setBackground(Color.RED);
            //...
            Window.this.add(formPanel, BorderLayout.CENTER);
            Window.this.validate();
            Window.this.repaint();
        }
    });
    add(encryptionCombobox, BorderLayout.NORTH);
}

public static void main(String[] args) {
    new Window().setVisible(true);
}
}

当我考虑它时,你应该使用CardLayout代替,它允许你在不同的面板(卡片)之间切换。