我想填寫一個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