2011-08-06 8 views
10

ile birden fazla bileşen içeren bir satırdaki bir bileşenin merkezi nasıl oluşturulur Bir ay ve bir buçuk yıl önce MiGLayout kullanmaya başladım ve her şey basit ve harika çalışıyor. Hala düzeltemediğim tek bir sorun var.MiGLayout

("Bu":

en ı bu şekilde yaptığınızda, başlık aslında merkezli almaz en sağdaki tarafı ve bir merkezli başlığını iki düğme olan bir satır var istediğimizi varsayalım bir JPanel)

this.add(labelTitle, "split, span, center"); 
this.add(closeButton, "east"); 
this.add(mainMenuButton, "east"); 

ne olur "labelTitle" yerleştirilir düğmeler sonra kullanılabilir kalan boşlukta merkezli olmasıdır, ama aslında bu bütün Jpanel göreli merkezli olmak istiyorum, sadece kalan boşluk .

İstenilen efekti elde etmek için hangi parametreleri kullanabilirim? Mutlak konumlandırmayı kullanabileceğimi biliyorum, ama bunu yapmak istemiyorum çünkü bu benim durumumda ilk sırada MiGLayout'u kullanma amacını yendi.

cevap

6

Aradığınız gibi bir şey olabilir mi?

Şerefe!

public static void main(String[] args) 
{ 
    JFrame frame = new JFrame(); 

    JPanel panel = new JPanel(new MigLayout("debug")); 
    panel.add(new JLabel("Label Title"), "x2 min(b1.x - unrel, (container.w+pref)/2)"); 
    panel.add(new JButton("Close Button"), "id b1, pushx, alignx right"); 
    panel.add(new JButton("Main Menu Button"), "alignx right"); 

    frame.add(panel); 
    frame.setSize(800, 200); 
    frame.setLocationRelativeTo(null); 
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
    frame.setVisible(true); 
} 
+0

Kusursuz çalışıyor. Yine de, tüm parametreleri anlayabilmek için yeterli miktarda veriyorum. Başlık etiketinin nasıl çalıştığını açıklamak ister misiniz? Yardımın için sağol! –

+0

Kolay. Sadece etiketin sağ tarafı (x2) için bir ifade ayarlar. İfadede sol tuşun x'i ve ona başvurabilmek için b1'in kimliğini belirledim. –

1

JXLayer'ı kullanabilir ve düğmeleri cam bölmesine yerleştirebilirsiniz.

JButton closeButton = new JButton("Close"); 
JButton mainMenuButton = new JButton("Menu"); 
JLabel labelTitle = new JLabel("Application"); 

JPanel panel = new JPanel(); 
panel.setLayout(new MigLayout(new LC().fillX())); 
panel.add(labelTitle, new CC().alignX("center").spanX()); 

JPanel buttonPanel = new JPanel(); 
buttonPanel.setLayout(new MigLayout(new LC().fillX())); 
buttonPanel.add(closeButton, new CC().alignX("right").split()); 
buttonPanel.add(mainMenuButton, new CC().alignX("right")); 
buttonPanel.setOpaque(false); 

JXLayer<JPanel> mainPanel = new JXLayer<JPanel>(); 
mainPanel.setView(panel); 
mainPanel.setGlassPane(buttonPanel); 

JFrame frame = new JFrame(); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
frame.setContentPane(mainPanel); 
frame.setSize(400, 600); 
frame.setVisible(true); 
+0

Eminim ki işe yarayacaktır, ancak MiGLayout ile bir çözüm arıyorum, yine de teşekkürler! –

0

sizin Jpanel oluştururken, aşağıdaki MigLayout başlatıcı kullanın: Eğer ilgili kısıtlamaları bilmiyorsanız
new MigLayout("","[]push[center]push[]","")

, burada kontrol edin: MigLayout Whitepaper

Bu yok üstleniyor Bu JPanel'de başka bir şey var ...

+0

Denediğiniz için teşekkürler, ancak çalışmıyor, hala panelin merkezi olmayan REMAINING alanında ortalanıyor. –

+0

Etiketi eklerken '' dock center''ı denediniz mi? – BenCole

+0

Evet ve işe yaramadı, nedenini bilmiyorum. @Mikael Grev bana bir çalışma çözümü verdi, denediğiniz için teşekkürler! –