我試圖建立類似於MigLayout以下佈局四溢:MigLayout跨距部件從細胞
基本上3列:一個按鈕,一個標籤,並用列表中的其他成分之一(跨越2列)和一個文本區域(應與第三列中的其他組件對齊)。訣竅是按鈕列跨越所有的從最後兩個開的行和其分裂成8個(每個按鈕)。不過我最終的按鈕重疊的名單,並與您的調試可以看到按鈕實際上是溢出的細胞。當我將按鈕放入另一個面板然後將其添加到主面板時,仍會發生這種情況。
添加膠水(或其他幾乎不可見的組件)會導致窗口大小調整(我希望底部組件佔用所有額外空間)時在按鈕和底部組件之間出現間隙。
有沒有一些方法來對底部部件推到下面的按鈕,使他們獲得從調整任何額外的空間?
(本來貼出的截圖,但我的第一篇文章,所以我沒有代表感謝mKorbel!)
代碼:
import net.miginfocom.swing.MigLayout;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
public class MigLayoutTest extends JPanel
{
private MigLayoutTest()
{
JFrame frame = new JFrame("MigLayout Test");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setContentPane(new JScrollPane(getPage()));
frame.getContentPane().setMinimumSize(new Dimension(650, 336));
frame.getContentPane().setPreferredSize(new Dimension(890, 562));
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private JPanel getPage()
{
JPanel panel = new JPanel(new MigLayout("fill, wrap 3, debug", "[][][grow, fill]"));
panel.setBorder(new EmptyBorder(10, 10, 10, 10));
// To add buttons directly to panel uncomment the commented out lines below and comment out each line that references listButtonPanel
JPanel listButtonPanel = new JPanel(new MigLayout("ins 0, wrap 1, aligny top"));
Dimension btnSize = new Dimension(105, 25);
JButton addBtn = new JButton("Add");
addBtn.setPreferredSize(btnSize);
listButtonPanel.add(addBtn);
// panel.add(addBtn, "spany 4, split 8, flowy");
JButton removeBtn = new JButton("Remove");
removeBtn.setPreferredSize(btnSize);
listButtonPanel.add(removeBtn);
// panel.add(removeBtn);
JButton copyBtn = new JButton("Copy");
copyBtn.setPreferredSize(btnSize);
listButtonPanel.add(copyBtn);
// panel.add(copyBtn)
panel.add(listButtonPanel, "spany 2, aligny top, hmax 100%");
JTextField txtField = new JTextField();
JLabel label = new JLabel("Property 1");
label.setLabelFor(txtField);
panel.add(label, "alignx right");
panel.add(txtField);
JComboBox comboBox = new JComboBox(new String[] {"cbx itm 1", "cbx itm 2", "cbx itm 3"});
comboBox.setEditable(true);
comboBox.setSelectedItem("");
label = new JLabel("ComboBox Property");
label.setLabelFor(comboBox);
panel.add(label, "alignx right");
panel.add(comboBox);
panel.add(new JLabel("A big JList"), "spanx 2, grow");
panel.add(new JLabel("A big JTextArea"));
JList list = new JList(new DefaultListModel());
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setVisibleRowCount(-1);
String[] names = new String[] {"Stuff to", "fill this", "JList..."};
DefaultListModel model = (DefaultListModel)list.getModel();
for (String name : names)
model.addElement(name);
JScrollPane scroller = new JScrollPane(list);
scroller.setMinimumSize(new Dimension(213, 100));
scroller.setPreferredSize(new Dimension(213, 100));
panel.add(scroller, "spanx 2, grow, pushy");
JTextArea textArea = new JTextArea();
scroller = new JScrollPane(textArea);
scroller.setPreferredSize(new Dimension(100, 100));
panel.add(scroller, "grow, pushy");
return panel;
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable() {
@Override
public void run() { new MigLayoutTest(); }
});
}
}
+1,圖片及所有相關代碼 – Thomas