【问题标题】:need help on java swing layout在 java swing 布局上需要帮助
【发布时间】:2013-09-25 17:00:09
【问题描述】:

以下是我添加标签和文本字段的代码。 我想添加它,使其 [label] [textfield] 在 2 列中

我知道我可以通过使用 gridlayout 来做到这一点,但行数需要固定,因此是否有另一种添加方法,无论我添加多少 [label] [textfield],它都会是 2专栏

图片显示预期视图

但目前是 [label] [textfield] [label2] [textfield2] [label3] [textfield3]

  public WizardPage page1() {
           WizardPage page1 = new WizardPage("1", "Page 1") {
               {
                   JTextField txt1 = new JTextField();
                   JTextField txt2 = new JTextField();
                   JTextField txt3 = new JTextField();
                   JTextField txt4 = new JTextField();

                   txt1.setName("text1");
                   txt2.setName("text2");
                   txt3.setName("text3");
                   txt4.setName("text4");

                   txt1.setPreferredSize(new Dimension(50, 20));
                   txt2.setPreferredSize(new Dimension(50, 20));
                   txt3.setPreferredSize(new Dimension(50, 20));
                   txt4.setPreferredSize(new Dimension(50, 20));

                   add(new JLabel("text1"));
                   add(txt1);
                   add(new JLabel("text2"));
                   add(txt2);
                   add(new JLabel("text3"));
                   add(txt3);
                   add(new JLabel("text4"));
                   add(txt4);
               }
           };
           return page1;
       }



>    public WizardPage(String title, String description){
>        
>        PropertyConfigurator.configure("config/log4j.properties");
>        log = Logger.getLogger(WizardPage.class);
>       
>       _title = title;
>       _description = description;
>       
> 
>     setLayout(new FlowLayout()); );


      addContainerListener(new WPContainerListener());
      this.setDoubleBuffered(true);
   }

【问题讨论】:

  • stackoverflow.com/questions/12835198/… 使用 BoxLayout,查看我的其他答案以找到更多示例
  • 但是 boxlayout 不是把所有东西都放在一列吗?
  • 您可以嵌套布局,因此可以使用BoxLayout。如果要使用GridLayout,请使用构造函数:new GridLayout(0, 2)。这会将列数设置为 2,并根据需要添加行。
  • 但如果我有 4 行,我必须更改为 GridLayout(4, 2)。它不能更加动态,无论行数如何,它总是 2 列
  • 请阅读我写的内容:将列数设置为2,并根据需要添加行。将 rows 设置为 0 可提供您想要的动态行为。

标签: java swing


【解决方案1】:

在网格中具有未指定行数的最简单方法是使用 GridLayout 并将 0 作为行数:

setLayout(new GridLayout(0, 2));

这将产生 2 列,并根据需要添加行。 GridLayout 的缺点是标签和文本字段将具有相同的宽度,这可能不是您想要的。

另一种简单的方法是嵌套布局:您可以将每个标签 + 文本字段组合放置到 JPanel,然后根据需要继续将这些面板添加到垂直 BoxLayout。这两者都不是完美无缺的,并且可能会导致如下布局:

label | text
-----------------
long label | text

如果您需要一个可以使列和行具有不同宽度的网格,请研究其他基于网格的布局:GridBagLayout 带有标准库,并且能够处理此类网格,但使用起来有点复杂。如果您发现自己制作了很多这样的布局,请考虑使用第三方布局管理器,例如 MiGLayout

【讨论】:

  • 谢谢.. 我想念你的答案,我不知道 0 是动态行数
猜你喜欢
  • 2016-10-23
  • 2019-01-25
  • 1970-01-01
  • 2023-03-06
  • 2012-01-26
  • 2013-12-20
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
相关资源
最近更新 更多