2015-08-06 5 views
1

Я хочу иметь одинаково центрированные * 3 объекта в моем графическом интерфейсе, и, как я ожидаю, есть простое решение, я просто не мог понять, как это сделать правильно.Центрирование 3 или более компонентов в MigLayout

* Другими словами: Я хочу сделать расстояние между центром и границами каждого компонента равным.

Что я пробовал:

import java.awt.Dimension; 
import javax.swing.JLabel; 
import javax.swing.JFrame; 
import javax.swing.JButton; 
import javax.swing.SwingUtilities; 
import net.miginfocom.swing.MigLayout; 


public class App { 

    public static void launchView(){ 
     JFrame frame = new JFrame("Foo"); 
     frame.setLayout(new MigLayout()); 
     JLabel l = new JLabel("Hello"); 
     JButton b = new JButton("Help me"); 
     JLabel l2 = new JLabel("2015-08-06 - 2015-09-32"); 

     frame.add(l, "pos 0.25al 0.5al"); 
     frame.add(b, "pos 0.5al 0.5al"); 
     frame.add(l2, "pos 0.75al 0.5al"); 
     frame.setSize(new Dimension(600, 200)); 
     frame.setVisible(true); 

    } 

    public static void main(String [] args){ 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       launchView(); 
      } 
     }); 
    } 
} 

Effect

На картинке вы можете увидеть, что дата является близко к центру, в то время как есть много свободного пространства на правой стороне - это ' не центрированы. Как я могу это исправить?

ответ

5

Вы должны определить ограничения столбцов, чтобы архивировать это. В следующем коде я определяю 3 столбца, и все они растут одинаково. Для каждого столбца я добавляю компонент и определяю его альгин 50% в x- и 50% в направлении y.
Вы можете отключить режим отладки (пунктирные борды вокруг ячеек), удалив опцию «debug» из ограничений компоновки.

public class App { 

    public static void launchView(){ 
     JFrame frame = new JFrame("Foo"); 
     frame.setLayout(new MigLayout("fillx, filly, debug", // Layout Constraints 
           "[grow][grow][grow]", // Column Constraints 
           "")); // Row Constraints 
     JLabel l = new JLabel("Hello"); 
     JButton b = new JButton("Help me"); 
     JLabel l2 = new JLabel("2015-08-06 - 2015-09-32"); 

     frame.add(l, "align 50% 50%"); 
     frame.add(b, "align 50% 50%"); 
     frame.add(l2, "align 50% 50%"); 
     frame.setSize(new Dimension(600, 200)); 
     frame.setVisible(true); 

    } 

    public static void main(String [] args){ 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
     public void run() { 
       launchView(); 
      } 
     }); 
    } 
} 

enter image description here