我正在制作一个小型GUI,需要在JFrame中添加至少4个面板。我正在使用GridBagLayout。这些面板中的每一个都有一些不同长度的标签和文本区域。 我插入3帧作为:
jf.add(panel1, BorderLayout.NORTH);
jf.add(panel2, BorderLayout.CENTER);
jf.add(panel4, BorderLayout.SOUTH);
这里jf是Frame。现在我还有一个Panel(Panel3),它必须介于panel2和panel4之间。请给我一些想法,我们如何插入3个以上的面板。 谢谢
答案 0 :(得分:2)
将框架内容窗格的布局更改为BorderLayout以外的其他布局,并将面板添加到所需的位置。您应该使用1列和4行的GridLayout。由于您掌握了所有面板的GridBagLayout,如果您愿意,也可以使用GridBagLayout作为内容窗格。
答案 1 :(得分:0)
首先,您使用的是 BorderLayout ,而不是 GridBagLayout 。实际上,使用GridBagLayout时,只需认为你的Frame是Excell页面就很容易使用。我为初学者和专家写了一篇关于如何正确使用GridBagLayout的full and very useful guide。
以下是代码:
package prueba;
import java.awt.*;
import javax.swing.*;
public class BlocPrueb extends JFrame{
JPanel container;
JPanel panel1;
JPanel panel2;
JPanel panel3;
JPanel panel4;
GridBagLayout cockatoo;
GridBagConstraints c;
public BlocPrueb(){
JButton g = new JButton("JPanel1");
JButton h = new JButton("JPanel2");
JButton j = new JButton("JPanel3");
JButton k = new JButton("JPanel4");
cockatoo = new GridBagLayout();
c = new GridBagConstraints();
container = new JPanel();
container.setLayout(cockatoo);
panel1 = new JPanel();
panel2 = new JPanel();
panel3 = new JPanel();
panel4 = new JPanel();
//Will use BorderLayout in the panels, cause its a demostration but it works as well as if it was the only panel in the JFrame.
panel1.setLayout(new BorderLayout());
panel1.add(g);
panel2.setLayout(new BorderLayout());
panel2.add(h);
panel3.setLayout(new BorderLayout());
panel3.add(j);
panel4.setLayout(new BorderLayout());
panel4.add(k);
c.gridx = 0;
c.gridy = 0;
c.fill = GridBagConstraints.BOTH;
container.add(panel1, c);
c.gridx = 1;
c.gridy = 0;
container.add(panel2, c);
c.gridx = 2;
c.gridy = 0;
container.add(panel3, c);
c.gridx = 3;
c.gridy = 0;
container.add(panel4, c);
getContentPane().add(container);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setTitle("Cockatoo Panels inside a JFrame (GridBagLayout)");
pack();
setResizable(true);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main (String args[]){
BlocPrueb v = new BlocPrueb();
}
}
这就是你应该得到的: