【发布时间】:2014-05-13 01:54:46
【问题描述】:
我正在尝试在 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,用于图片和所有相关代码
标签: java swing layout-manager miglayout