【问题标题】:Vertical button bar layout using miglayout使用 miglayout 的垂直按钮栏布局
【发布时间】:2012-07-04 05:08:47
【问题描述】:

我想知道使用 mig 布局实现相对常见的布局的“最佳”方式。 我有大型组件(例如,在这种情况下为 JLists),以及两个大型组件之间的按钮。所以我想要一个垂直按钮堆栈,底部有一个间隙。我已经做过几次了,但是

  1. 似乎有很多方法可以达到这个结果;
  2. 每次,我都在反复试验,我觉得我一定错过了什么。
  3. 无论如何,由于这是一个相当常见的问题,最好在某个地方有一个示例,并且 stackOverflow 似乎被用作 MigLayout wiki。

所以,我想用 miglayout 实现这个演示:

+---------------+  +----+  +----------------------+
|  list 1       |  | bt1|  |  list2               |
|               |  +----+  |                      |
|               |  +----+  |                      |
|               |  | bt2|  |                      |
|               |  +----+  |                      |
|               |  +----+  |                      |
|               |  | bt3|  |                      |
|               |  +----+  |                      |
|               |          |                      |
|               |          |                      |
+---------------+          +----------------------+

目前,我这样做:

add(new JScrollPane(jlist1),"grow, pushy");
add(button1,"flowy, aligny top, split 3");
add(button2, "");
add(button3, "");
add(new JScrollPane(jlist2), "grow, pushy");        

有更好的方法吗?是否值得避免创建用于放置按钮的面板?

【问题讨论】:

    标签: java swing layout layout-manager miglayout


    【解决方案1】:

    我只是将按钮放在它们自己的面板中。这简化了布局,并且类似的组件往往会一起修改,因此最好将它们放在单独的函数或类中。

    只要有可能,我就会尝试使用容器的树状结构,而不是使用包含所有组件的复杂布局。当一切都依赖于其他一切的布局时,阅读和重新排列事物变得更加困难。

    【讨论】:

      【解决方案2】:

      对于仍然在此布局中苦苦挣扎的人:您可以使用 MigLayout 相当简单地做到这一点,而无需额外的 JPanel 作为按钮容器:

      /**
       * Simple assign panel layout.
       */
      public class AssignView extends JPanel {
          private JScrollPane scrollPane;
          private JScrollPane scrollPane_1;
          private JList<Object> list;
          private JList<Object> list_1;
      
          private JButton btnNewButton;
          private JButton btnNewButton_1;
          private JButton btnNewButton_2;
          private JButton btnNewButton_3;
      
          /**
           * Create the panel.
           */
          public AssignView() {
              initialize();
          }
      
          private void initialize() {
              setLayout(new MigLayout("", "[grow][][grow]", "[grow,top]"));
              add(getScrollPane(), "cell 0 0,grow");
              add(getBtnNewButton(), "flowy,cell 1 0");
              add(getScrollPane_1(), "cell 2 0,grow");
              add(getBtnNewButton_2(), "cell 1 0");
              add(getBtnNewButton_1(), "cell 1 0");
              add(getBtnNewButton_3(), "cell 1 0");
          }
      
          private JScrollPane getScrollPane() {
              if (scrollPane == null) {
                  scrollPane = new JScrollPane();
                  scrollPane.setViewportView(getList());
              }
              return scrollPane;
          }
      
          private JButton getBtnNewButton() {
              if (btnNewButton == null) {
                  btnNewButton = new JButton("New button");
              }
              return btnNewButton;
          }
      
          private JScrollPane getScrollPane_1() {
              if (scrollPane_1 == null) {
                  scrollPane_1 = new JScrollPane();
                  scrollPane_1.setViewportView(getList_1());
              }
              return scrollPane_1;
          }
      
          private JButton getBtnNewButton_1() {
              if (btnNewButton_1 == null) {
                  btnNewButton_1 = new JButton("New button");
              }
              return btnNewButton_1;
          }
      
          private JButton getBtnNewButton_2() {
              if (btnNewButton_2 == null) {
                  btnNewButton_2 = new JButton("New button");
              }
              return btnNewButton_2;
          }
      
          private JList<Object> getList() {
              if (list == null) {
                  list = new JList<>();
              }
              return list;
          }
      
          private JList<Object> getList_1() {
              if (list_1 == null) {
                  list_1 = new JList<>();
              }
              return list_1;
          }
      
          private JButton getBtnNewButton_3() {
              if (btnNewButton_3 == null) {
                  btnNewButton_3 = new JButton("New button");
              }
              return btnNewButton_3;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2016-04-29
        • 1970-01-01
        • 1970-01-01
        • 2019-02-05
        • 1970-01-01
        • 1970-01-01
        • 2015-02-12
        • 1970-01-01
        • 2013-12-11
        相关资源
        最近更新 更多