【问题标题】:using a box layout in java在java中使用盒子布局
【发布时间】:2012-09-15 09:04:16
【问题描述】:

以下代码方便地创建了一个框布局,但我遇到的问题是文本字段占据了整行。它应该假定它被指定的参数长度。

 public void makeControlpanel(){
    JPanel controlpanel = new JPanel();
     //SET PANEL LAYOUT MANAGERS
    controlpanel.setLayout(new BoxLayout(controlpanel,BoxLayout.PAGE_AXIS));

    controlpanel.setBorder(BorderFactory.createTitledBorder("Create Control file")); 


    filenameC   = new JLabel("Filename");
    filenameBad   = new JLabel("Bad Filename");
    filenameDis = new JLabel("Discard Filename");

    // fields
    fileField = new JTextField(1);
    badfileField = new JTextField(7);
    discardfileField = new JTextField(7);

【问题讨论】:

  • 你读过这个:docs.oracle.com/javase/tutorial/uiswing/layout/box.html 吗?一般来说,布局管理器有权覆盖组件大小等属性。
  • 要么使用允许微调的 LayoutManager,要么使用 JTextField 的子类返回 maxSize。推荐前者,反正你需要一个更强大的 LayoutManager。

标签: java swing layout-manager boxlayout


【解决方案1】:

布局管理器决定组件的大小。您可以选择使用

来定义组件到布局管理器的边界
comp.setMinimumSize(new Dimension(w, h));
comp.setPreferredSize(new Dimension(w, h));
comp.setMaximumSize(new Dimension(w, h));

当您提供setPreferredSize 时,布局管理器将尝试 提供该尺寸。 GridBagLayout 是最灵活的布局,你几乎可以实现任何你需要的布局。

定义的参数length只定义了你可以在文本字段中输入的字符。

【讨论】:

  • no - 永远不会使用任何 setXXSize 方法,原因参见stackoverflow.com/a/7229519/203657),而是使用合适的 LayoutManager。
  • @ Kleopatra,你建议什么布局,因为我想将面板中的组件排列成不同长度的行
  • @lee 我个人目前最喜欢的是 MigLayout(顺便说一句:与号和名称之间的空格会阻止我收到您的评论的通知 :-)
  • @Kleopatra 人们应该知道这些方法的存在以及它的作用,以便他可以决定是否使用它。 @Lee 试试GridBagLayout.
  • 不,最好忘记(或者新手永远不会知道)这些方法的存在 - 应用它们会导致进一步的无尽痛苦..
猜你喜欢
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 2020-08-12
  • 1970-01-01
相关资源
最近更新 更多