java - 删除 Swing 内容 Pane /面板并显示新面板

标签 java swing

我创建了一个小程序,当您按下“忘记密码”按钮时,我会删除小程序上的当前 JPanel 并创建一个新的 JPanel,显示与检索/忘记密码相关的 JComponent。

我可以使用 .removeAll() 成功清除 JPanel; 但是 在我创建所有新的 JComponents 并将它们添加到内容 Pane (主 JPanel)之后,小程序变成灰色并且不显示新的 JPanel 和组件 UNLESS 我调整小程序的大小,然后重新绘制并正常工作。

我已经尝试在创建所有新的 JComponents 后放置 .invalidate() 但仍然没有刷新小程序?

在使用 .removeAll() 清除 JPanel 并向其添加不同的 JComponents 后,如何让我的 JPanel 出现?

代码:

public class App extends JApplet
{
    JPanel mainPanel; 

    public void init()
    {
        SwingUtilities.invokeAndWait( new Runnable() {
            public void run()
            {
                showLoginPanel(); // this shows fine on loading
            }
        });

    }

    public void showForgotPassPanel()
    {
        mainPanel.removeAll();

        mainPanel = (JPanel) getContentPane();
        Box hBox  = Box.createHorizontalBox();
        Box vBox  = Box.createVerticalBox();
        mainPanel.setLayout( new BorderLayout() ); 

        ... create components

        ... add components to mainPanel

        mainPanel.invalidate(); // doesn't make new layout visible, not unless I resize the applet
    }
}

最佳答案

使用 mainPanel.revalidate(); 和/或 mainPanel.repaint(); 方法。

关于java - 删除 Swing 内容 Pane /面板并显示新面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4939949/

相关文章:

Java Swing 使用文本文件中的数据填充多个 JTextField

java - 使用 spring 集成 IMAP 适配器,如何手动获取标记为 "unread"的电子邮件?

java - 将 FileOutputStream 重定向到控制台 - Java

java - 从存储在 HashMap 中的字符串数组列表生成字符串组合

java - 如何在标题边框周围添加空间?

java - JPanel组件绘制顺序

java - JComboBox 在removeAllItems() 时引用旧框架

java - 是否可以在不读取和写入整个文件(Java)的情况下更改 txt 文件中的一行?

java - 在 Java 中,如何围绕在更改属性时调用方法的对象构建 "proxy wrapper"?

java - JTextPane同步样式选择UI问题