【问题标题】:How to stop resizing of JPanel in JFrame如何在 JFrame 中停止调整 JPanel 的大小
【发布时间】:2013-03-14 12:49:36
【问题描述】:

我有扩展 JPanel 的提醒类,带有 boxlayout 和

setPreferredSize(new Dimension(500,500))

在主类中我有 JFrame

rem = new Reminder();

            frame.setSize(900,900);
            rem.setMaximumSize(new Dimension(500,500));
            frame.getContentPane().removeAll();
            frame.setLayout(new BorderLayout());
            frame.add(rem,BorderLayout.CENTRE);
            frame.validate();
            frame.repaint();

我希望提醒面板位于 jframe 的中心而不改变它的大小(500,500),并且框架不应该改变它的大小(900,900)。当我运行上面的代码时,rem 面板完全展开了。如何使rem面板居中?

【问题讨论】:

    标签: java swing layout jpanel


    【解决方案1】:

    简单的方法:使用 AbsoluteLayout 并使用图形编辑器将“rem”准确定位到您想要的位置。 然后为框架设置不变的大小:

     frame.setResizable(false);
    

    【讨论】:

    • 对于那些来到这里希望能够在不调整面板大小的情况下调整 JFrame 大小的人(如问题所言),问题在于您的 LayoutManager。我建议研究 MigLayout,因为它比 LayoutManagers 更容易学习,而且非常强大。此外,setMaximum/Prefered/Min 大小或 @Override-ing getMax/Min/Pref 大小是需要研究的潜在因素。
    【解决方案2】:

    不要使用BorderLayout。如果 BorderLayout 正是您不想要的,为什么还要使用它?

    编辑:BoxLayout 是一种选择,如果您确实需要自己绝对定位所有内容,您也可以决定不使用布局管理器,例如http://docs.oracle.com/javase/tutorial/uiswing/layout/none.html

    【讨论】:

    • I 框架布局与 boxlayout,我面临错误,因为 boxlayout 无法共享。
    • “不能共享”是什么意思?
    • 当我将布局设置为 jframe 的 boxlayout 时,它给了我错误,因为 boxlayout 无法共享?即使我不知道为什么会出现这个错误。
    • @vijay 那是因为你正在做这样的事情:panel1.setLayout(new BoxLayout(panel2, BoxLayout.Y_AXIS)) 在我的例子中,新 BoxLayout 的第一个参数应该与你要附加到的面板 panel1 相同。
    【解决方案3】:

    此外,如果您想使用 Borderlayout,我很确定这是您代码中的错字:

    frame.add(rem,BorderLayout.CENTRE);
    

    应该是:

    frame.add(rem,BorderLayout.CENTER);
    

    会不会是这件小事让你烦恼?

    【讨论】:

      猜你喜欢
      • 2012-09-01
      • 1970-01-01
      • 2011-10-03
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多