Java 使用miglayout的垂直按钮栏布局

Java 使用miglayout的垂直按钮栏布局,java,swing,layout,layout-manager,miglayout,Java,Swing,Layout,Layout Manager,Miglayout,我想知道用mig布局实现相对普通布局的“最佳”方法。 我有大型组件(例如,在本例中是JLists),以及两个大型组件之间的按钮。所以我想要一个垂直的按钮堆栈,底部有一个间隙。我已经做了几次了,但是 似乎有很多方法可以达到这个结果 每一次,我都在不断地尝试和犯错,我觉得我一定错过了什么 在任何情况下,由于这是一个相当常见的问题,最好在某处有一个示例,stackOverflow似乎被用作MigLayout wiki 因此,我想通过miglayout实现此演示: +---------------+

我想知道用mig布局实现相对普通布局的“最佳”方法。 我有大型组件(例如,在本例中是JLists),以及两个大型组件之间的按钮。所以我想要一个垂直的按钮堆栈,底部有一个间隙。我已经做了几次了,但是

  • 似乎有很多方法可以达到这个结果
  • 每一次,我都在不断地尝试和犯错,我觉得我一定错过了什么
  • 在任何情况下,由于这是一个相当常见的问题,最好在某处有一个示例,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");        
    

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

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


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

    对于仍在使用此布局的任何人来说:您可以使用
    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;
        }
    }
    
    /**
    *简单指定面板布局。
    */
    公共类AssignView扩展了JPanel{
    私有JScrollPane滚动窗格;
    私有JScrollPane滚动窗格_1;
    私人名单;
    私人名单(1);;
    私人JButton btnNewButton;
    私人JButton btnNewButton_1;
    私人JButton btnNewButton_2;
    私人JButton btnNewButton_3;
    /**
    *创建面板。
    */
    公共视图(){
    初始化();
    }
    私有void初始化(){
    setLayout(新的MigLayout(“,”[grow][[grow]”,“[grow,top]”);
    添加(getScrollPane(),“单元格0,增长”);
    添加(getBtnewButton(),“flowy,单元格10”);
    添加(getScrollPane_1(),“单元格20,增长”);
    添加(GetBtnewButton_2(),“单元格10”);
    添加(GetBtnewButton_1(),“单元格10”);
    添加(getBtnNewButton_3(),“单元格10”);
    }
    私有JScrollPane getScrollPane(){
    如果(滚动窗格==null){
    scrollPane=新的JScrollPane();
    setViewportView(getList());
    }
    返回滚动窗格;
    }
    私有JButton getBtnNewButton(){
    如果(BtnewButton==null){
    BtnewButton=新按钮(“新按钮”);
    }
    返回btnewbutton;
    }
    私有JScrollPane getScrollPane_1(){
    如果(滚动窗格_1==null){
    scrollPane_1=新的JScrollPane();
    滚动窗格_1.setViewportView(getList_1());
    }
    返回滚动窗格_1;
    }
    私有JButton getBtnNewButton_1(){
    如果(BtnewButton_1==null){
    BtnewButton_1=新按钮(“新按钮”);
    }
    返回btnNewButton_1;
    }
    私有JButton getBtnNewButton_2(){
    如果(BtnewButton_2==null){
    BtnewButton_2=新按钮(“新按钮”);
    }
    返回btnNewButton_2;
    }
    私有JList getList(){
    if(list==null){
    列表=新JList();
    }
    退货清单;
    }
    私有JList getList_1(){
    如果(列表_1==null){
    列表_1=新JList();
    }
    返回列表_1;
    }
    私有JButton getBtnNewButton_3(){
    如果(BtnewButton_3==null){
    Btnewbutton_3=新按钮(“新按钮”);
    }
    返回btnNewButton_3;
    }
    }