java - 将 JPanel 类放入另一个类的 JFrame 中

标签 java swing netbeans jframe jpanel

我必须插入另一个类的 JFrame、JPanel 中。 我在 JFrame 中有一个 jMenuItem,我希望当我单击 JMenuItem 时,JPanel 将出现。

 private void searchStudMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                                   
        searchStud s = new searchStud();
        s.setVisible(true);
        changePanel(s);
    }                                                  

    private void changePanel(JPanel panel) {
        getContentPane().removeAll();
        getContentPane().add(panel);
        getContentPane().doLayout();
        update(getGraphics());
    }

searchStud 是包含 JPanel 的类。 当我执行程序并单击 JMenuItem 时,没有任何反应...... 我尝试在网上搜索,但找到的内容不起作用。

最佳答案

实际组件 - 我认为是 JFrame - 已更改,必须重新验证:

private void changePanel(JPanel panel) {
    getContentPane().removeAll();
    getContentPane().add(panel);
    revalidate();
}

刚刚用这个最少的代码进行了测试:

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


@SuppressWarnings("serial")
public class Test extends JFrame {

    public static void main(String[] args) {
        new Test();
    }


    private static class searchStud extends JPanel {
        searchStud() {
            add(new JLabel("SEARCH STUD"));
        }
    }


    private Test() {
        SwingUtilities.invokeLater(this::initGUI);
    }

    private void initGUI() {
        JButton button = new JButton("Search");
        button.addActionListener(this::searchStudMenuItemActionPerformed);

        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        add(button);
        setSize(300, 200);
        validate();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    private void searchStudMenuItemActionPerformed(java.awt.event.ActionEvent evt) {                                                   
        searchStud s = new searchStud();
        s.setVisible(true);
        changePanel(s);
    }                                                  

    private void changePanel(JPanel panel) {
        getContentPane().removeAll();
        getContentPane().add(panel);
        revalidate();
    }
}

关于java - 将 JPanel 类放入另一个类的 JFrame 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44260053/

相关文章:

java - 来自 Java EE 应用程序服务器的数据流

java - 如何去除 Vaadin 8 Grid 中的单元格边框?

java - Struts2 没有加载我的 webapp...404 错误?

java - 需要使用 JFileChooser 将整个文件夹导入 NetBeans 中的 JList 的帮助

java - 构建 Java 网站时如何将标记与应用程序代码分开?

java - 为什么这些类之一没有继承我创建的接口(interface)?

java - 如何通过另一个线程更新我的 jLabel?

java - 如何为 JLabel 设置禁用的文本颜色?

netbeans 上的 Java 图像路径

xml - 属性的 ref 不适用于 Netbeans 下的复杂类型