【问题标题】:Put a JPanel class into a JFrame of another class将 JPanel 类放入另一个类的 JFrame
【发布时间】:2017-05-30 10:44:45
【问题描述】:

我必须插入一个 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 时,没有任何反应...... 我尝试在线搜索,但我发现没有用。

【问题讨论】:

  • 请在update(getGraphics());之后使用invalidate();validate();
  • 完成但没有任何反应...我尝试在控制台中打印一个字符串以查看是否已到达 JPanel 并且实际上已到达但未显示到视频中

标签: java swing netbeans jframe jpanel


【解决方案1】:

实际的组件——我想是一个 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();
    }
}

【讨论】:

  • 使用重新验证()。 validate() 是较旧的 AWT 方法。 revalidate() 是为 Swing 添加的较新方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
  • 2021-05-03
相关资源
最近更新 更多