如何在运行时Java Swing中修改JPanel大小

如何在运行时Java Swing中修改JPanel大小,java,swing,netbeans,jpanel,Java,Swing,Netbeans,Jpanel,我试图在最大化窗口时修改JPanel大小 事件工作正常,但新大小不起作用 private void resize(String type){ if(type.equals("maximized")){ System.out.println(panel_menu.getLocation()); panel_menu.setPreferredSize(new Dimension(panel_menu.getWidth(), d.height));

我试图在最大化窗口时修改JPanel大小

事件工作正常,但新大小不起作用

private void resize(String type){
    if(type.equals("maximized")){
        System.out.println(panel_menu.getLocation());
        panel_menu.setPreferredSize(new Dimension(panel_menu.getWidth(), d.height));
        panel_menu.revalidate();
    }
}
当我最大化窗口时,面板就是这样做的,但是当我点击最大化按钮时,JPanel不会改变大小

有什么帮助吗?谢谢大家!

通常不直接修改JPanel大小,而是

  • 使用布局管理器和嵌套JPanel的智能组合为您调整大小
  • 有时会覆盖JPanel上的
    public维度getPreferredSize()
    ,以允许它灵活地调整自身大小,但这样做时要小心,并且通常要遵守
    super。getPreferredSize()
    会导致覆盖

我是java swing新手,我该怎么做?@LuisBermúdez:做什么?使用布局管理器?读这本书。是否覆盖getPreferredSize?--阅读该方法的相关API以及本网站上的类似问题。请注意,您的问题在关键细节和代码方面有点贫乏,包括您试图达到的确切效果,您当前的代码如何不起作用。您将希望创建并发布有效的以及签出的,以帮助您改进当前和将来的问题。运气。@LuisBermúdez例如,如果您将JPanel放入JFrame的contentPane(使用BorderLayout)的
BorderLayout.CENTER
位置,那么JPanel将直接使用JFrame重新调整大小。关键是要学习各种布局管理器,然后对它们进行实验。你声明你的代码“不工作”,但需要告诉它是如何工作的。你还需要在你的问题中展示我们可以编译、运行、测试和修改的代码,请阅读重要链接,因为它会告诉你这个有用构造的细节。对不起,我想我是在具体说明。当我点击最大化按钮时,面板的大小不会改变。这就是问题所在……您确实知道您在组件上调用
revalidate()
,而不是在保存组件的容器上调用它——这是您应该做的。但是,您仍然没有发布有效的。