2014-07-06 28 views
0

我有一組按鈕將停留在面板中間。我試圖將它們放置在面板的頂部,使其處於流暢的佈局約束中。任何幫助實現這一點非常感謝。我試過碼頭,但沒有做任何事情。Miglayout將組件對齊到單元格頂部

private class ProductPanel extends JPanel { 

    private JLabel lblProd; 
    private JButton butAdd; 
    private JButton butRemove; 
    private JButton butEdit; 
    private Product_Table_Model ptm; 
    private JScrollPane scroll; 
    private JPanel buttonPanel; 
    private JTable table; 

    ProductPanel() { 

     setLayout(new MigLayout("debug")); 

     ptm = new Product_Table_Model(
       (ArrayList<Product>) client 
         .receiveObject("Get_Product_Data")); 

     initComponents(); 

    } 

    public void initComponents() { 

     lblProd = new JLabel ("Product List: "); 

     buttonPanel = new JPanel (new MigLayout()); 
     butAdd = new JButton ("Add"); 
     butRemove = new JButton ("Remove"); 
     butEdit = new JButton ("Edit"); 
     buttonPanel.add(butAdd, "cell 0 0"); 
     buttonPanel.add(butRemove, "cell 0 1"); 
     buttonPanel.add(butEdit, "cell 0 2"); 

     butAdd.setPreferredSize(new Dimension(40, 50)); 

     add(lblProd, "wrap"); 

     table = new JTable(ptm); 
     table.setFillsViewportHeight(true); 
     scroll = new JScrollPane(table); 

     add(scroll); 
     add(buttonPanel); 


    } 

} 
+0

您需要提供完整的示例。必須有另一個問題;流水模式下的按鈕默認對齊頂部。 –

+0

更新了代碼,試圖做一個圖像,但我沒有10的聲望。 – Grim

回答

2

按鈕按照預期與頂部對齊。這是面板本身 未在其單元內對齊。所以下面將解決這個問題:

add(buttonPanel, "top");

你不應該與setPrefferedSize()方法來設置優先停留大小。 而是使用尺寸組。

MigLayout是非常強大的佈局管理器,您不需要創建兩個帶有兩個佈局管理器的 面板。您可以更輕鬆地創建佈局。 下面的例子是這樣一個解決方案:

package com.zetcode; 

import java.awt.EventQueue; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import net.miginfocom.swing.MigLayout; 

public class ProductPanel2 extends JPanel { 

    private JLabel lblProd; 
    private JButton butAdd; 
    private JButton butRemove; 
    private JButton butEdit; 
    private JScrollPane scroll; 
    private JTable table; 

    public ProductPanel2() { 

     initComponents(); 
    } 

    private void initComponents() { 

     setLayout(new MigLayout()); 

     lblProd = new JLabel("Product List: "); 

     butAdd = new JButton("Add"); 
     butRemove = new JButton("Remove"); 
     butEdit = new JButton("Edit"); 

     table = new JTable(); 
     table.setFillsViewportHeight(true); 
     scroll = new JScrollPane(table);   

     add(lblProd, "wrap"); 
     add(scroll); 
     add(butAdd, "split 3, flowy, top, sgx"); 
     add(butRemove, "sgx"); 
     add(butEdit, "sgx");   
    } 

    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       JFrame frame = new JFrame(); 
       ProductPanel2 pane = new ProductPanel2(); 
       frame.setContentPane(pane); 
       frame.setSize(350, 250); 
       frame.setLocationRelativeTo(null); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setVisible(true); 
      } 
     });   

    } 
} 

下表中被分成三個子電池細胞。插入這些子單元中的三個按鈕是 。垂直流動模式通過約束條件設置。 top約束將按鈕對齊到頂部。最後,約束使按鈕的大小相同。

Snapshot of the example

+0

sgx做什麼? – Grim

+0

查看MigLayout備忘單。你有解釋所有的限制。它說「它給組件一個大小組名稱,所有共享一個大小組名稱的組件將獲得相同的BoundSize(min/preferred/max)。」語法是:sg [name],sgx [name],sgy [name]之一。默認情況下按鈕的高度相同,所以在我們的例子中,sgx就足夠了。示例中只有一個大小組,因此我們不必指定它的名稱。 –