2013-11-01 50 views
1

我试图让“>>”按钮垂直居中,使用GroupLayout。居中定位在组布局(Swing)

但是,正如你所看到的那样,它正在把它放在顶部。我试图搞乱布局,似乎无法得到它的工作。请帮忙! =)

horizontal_group = layout.createParallelGroup GroupLayout::Alignment::CENTER 
horizontal_group.addComponent tags_label 
available_across_hor = layout.createSequentialGroup 
available_down_hor = layout.createParallelGroup GroupLayout::Alignment::CENTER 
available_down_hor.addComponent available_label 
available_down_hor.addComponent available_pane 
available_down_hor.addComponent new_tag_button 
selected_down_hor = layout.createParallelGroup GroupLayout::Alignment::CENTER 
selected_down_hor.addComponent selected_label 
selected_down_hor.addComponent selected_pane 
selected_down_hor.addComponent remove_tag_button 
available_across_hor.addGroup available_down_hor 
available_across_hor.addComponent move_button 
available_across_hor.addGroup selected_down_hor 
horizontal_group.addGroup available_across_hor 

vertical_group = layout.createSequentialGroup 
vertical_group.addComponent tags_label 
available_across_ver = layout.createParallelGroup 
available_down_ver = layout.createSequentialGroup 
available_down_ver.addComponent available_label 
available_down_ver.addComponent available_pane 
available_down_ver.addComponent new_tag_button 
selected_down_ver = layout.createSequentialGroup 
selected_down_ver.addComponent selected_label 
selected_down_ver.addComponent selected_pane 
selected_down_ver.addComponent remove_tag_button 
available_across_ver.addGroup available_down_ver 
available_across_ver.addComponent move_button 
available_across_ver.addGroup selected_down_ver 
vertical_group.addGroup available_across_ver 

layout.setHorizontalGroup horizontal_group 
layout.setVerticalGroup vertical_group 

UI

+0

这就是为什么人们不要手动编辑GroupLayout的原因。您是否尝试过使用NetBeans? – pjp

+0

我认为你需要在其中一个垂直组上设置对齐方式。 – pjp

+0

如果您关注Netbeans如何使用GroupLayout,则可以以任何方式布局组件。发布您的代码。我总是使用GroupLayout,并且最喜欢它。它非常酷。 – UDPLover

回答

0

这里是解决方案:

package com.zetcode; 

import java.awt.Container; 
import java.awt.EventQueue; 
import javax.swing.GroupLayout; 
import static javax.swing.GroupLayout.Alignment.CENTER; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JList; 
import javax.swing.JScrollPane; 


public class GroupLayoutTags extends JFrame { 

    public GroupLayoutTags() { 

     initUI(); 

     setTitle("Tags"); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
    } 

    private void initUI() { 

     Container pane = getContentPane(); 
     GroupLayout gl = new GroupLayout(pane); 
     pane.setLayout(gl); 

     JLabel avLbl = new JLabel("Available"); 
     JLabel tagsLbl = new JLabel("Tags"); 
     JLabel selLbl = new JLabel("Selected"); 

     JButton newBtn = new JButton("New"); 
     JButton moveBtn = new JButton(">>"); 
     JButton remBtn = new JButton("Remove"); 

     JList leftList = new JList(); 
     JScrollPane spleft = new JScrollPane(leftList); 
     JList rightList = new JList(); 
     JScrollPane spright = new JScrollPane(rightList); 

     gl.setAutoCreateGaps(true); 
     gl.setAutoCreateContainerGaps(true); 

     gl.setHorizontalGroup(gl.createParallelGroup(CENTER) 
       .addComponent(tagsLbl) 
       .addGroup(gl.createSequentialGroup() 
         .addGroup(gl.createParallelGroup(CENTER) 
           .addComponent(avLbl) 
           .addComponent(spleft, 100, 200, Short.MAX_VALUE) 
           .addComponent(newBtn)) 
         .addComponent(moveBtn) 
         .addGroup(gl.createParallelGroup(CENTER) 
           .addComponent(selLbl) 
           .addComponent(spright, 100, 200, Short.MAX_VALUE) 
           .addComponent(remBtn))) 
     ); 

     gl.setVerticalGroup(gl.createSequentialGroup() 
       .addComponent(tagsLbl) 
       .addGroup(gl.createParallelGroup(CENTER) 
         .addGroup(gl.createSequentialGroup() 
           .addComponent(avLbl) 
           .addComponent(spleft, 100, 250, Short.MAX_VALUE) 
           .addComponent(newBtn)) 
         .addComponent(moveBtn) 
         .addGroup(gl.createSequentialGroup() 
           .addComponent(selLbl) 
           .addComponent(spright, 100, 250, Short.MAX_VALUE) 
           .addComponent(remBtn))) 
     ); 

     pack();   

    } 


    public static void main(String[] args) { 

     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       GroupLayoutTags ex = new GroupLayoutTags(); 
       ex.setVisible(true); 
      } 
     }); 
    } 
} 

如果发现MigLayout经理更容易比GroupLayout使用。 但是,通过一些练习,GroupLayout也是可行的。

GroupLayout tags