我想填写一个JPanel
其布局是GridLayout
,如果这是不可能的使用GridLayout
我想知道如果使用GridBagLayout
是可能的和如何?如何用GridLayout或GridBagLayout垂直填充JPanel?
下面的代码:
public class NestedLayoutExample {
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
final JFrame frame = new JFrame("Nested Layout Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setMinimumSize(new Dimension(300, 400));
final JPanel gui = new JPanel(new BorderLayout(5,5));
gui.setBorder(new TitledBorder("BorderLayout(5,5)"));
JPanel dynamicLabels = new JPanel(new BorderLayout(4,4));
dynamicLabels.setBorder(new TitledBorder("BorderLayout(4,4)"));
gui.add(dynamicLabels, BorderLayout.CENTER);
final JPanel labels = new JPanel(new GridLayout(4,0,3,3));
labels.setBorder(new TitledBorder("GridLayout(0,2,3,3)"));
JButton addNew = new JButton("Add Another Label");
dynamicLabels.add(addNew, BorderLayout.NORTH);
addNew.addActionListener(new ActionListener(){
private int labelCount = 0;
@Override
public void actionPerformed(ActionEvent ae) {
labels.add(new JLabel("Label " + ++labelCount));
frame.validate();
}
});
dynamicLabels.add(new JScrollPane(labels), BorderLayout.CENTER);
frame.setContentPane(gui);
frame.pack();
frame.setLocationRelativeTo(null);
try {
// 1.6+
frame.setLocationByPlatform(true);
frame.setMinimumSize(frame.getSize());
} catch(Throwable ignoreAndContinue) {}
frame.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}}
这是我得到上面的代码:
而这正是我想要的:
而且想知道更好的方法来d它。
从[布局管理器视觉指南]开始(http:// docs .oracle.com/javase/tutorial/uiswing/layout/visual.html)并熟悉一下当一个布局比另一个更适合使用(即:'GridLayout'或'GridBagLayout')。如果您仍然无法理解说明,请运行演示。演示涵盖了您所要求的基本使用方法问题。 –
@DavidYee好的,但我为我需要的GridLayout很好,我只是想知道,如果我可以垂直填充使用该布局的JPanel –
你的意思是你想'actionPerformed'方法添加'JLabels'是垂直填充?你关心行或列吗? – MadProgrammer