Java - 如何在GridLayout中对齐JPanel

时间:2017-09-06 12:23:31

标签: java swing

这是我目前的表格:

enter image description here

我正在尝试使用4列单选按钮创建一个表单但是当我尝试将按钮添加到另一个面板的网格布局时,它们似乎是错误对齐的。我没有在网格布局上设置任何边界高度所以我不确定是什么导致它转移。

我的代码:

public class Window extends JFrame{
public void paint(Graphics g) {
    super.paint(g); // ??
    getContentPane().setBackground(Color.WHITE); // background color
}

public static void main(String[] args) {
    Window w = new Window();
     w.setSize(1500,1000);
     w.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

     JLabel title = new JLabel("Menu", SwingConstants.CENTER);
     title.setFont(title.getFont().deriveFont(32f));

     Container titlePanel = new JPanel(); // used as a container
     titlePanel.setBackground(Color.WHITE);
     FlowLayout flow = new FlowLayout(); // Create a layout manager
     titlePanel.setLayout(flow);// assign flow layout to panel
     titlePanel.add(title); // add label to panel
     w.getContentPane().add(BorderLayout.NORTH,titlePanel);

     Container mains = new JPanel(new GridLayout(7, 0));
     mains.setBackground(Color.RED);
     JLabel mainsHeader = new JLabel("Mains");
     mainsHeader.setFont(mainsHeader.getFont().deriveFont(24f));
     mains.add(mainsHeader);

     Container noodles = new JPanel(new GridLayout(4, 0));
     noodles.setBackground(Color.GREEN);
     JLabel noodlesHeader = new JLabel("Noodles");
     noodlesHeader.setFont(noodlesHeader.getFont().deriveFont(24f));
     noodles.add(noodlesHeader);

     Container sauces = new JPanel(new GridLayout(3, 0));
     sauces.setBackground(Color.BLUE);
     JLabel saucesHeader = new JLabel("Sauce");
     saucesHeader.setFont(saucesHeader.getFont().deriveFont(24f));
     sauces.add(saucesHeader);


     Container extras = new JPanel(new GridLayout(6, 0));
     extras.setBackground(Color.YELLOW);
     JLabel extrasHeader = new JLabel("Extra");
     extrasHeader.setFont(extrasHeader.getFont().deriveFont(24f));
     extras.add(extrasHeader)

     Container menuSelection = new JPanel(new GridLayout(0,4));
     menuSelection.add(mains);
     menuSelection.add(noodles);
     menuSelection.add(sauces);
     menuSelection.add(extras);

     w.getContentPane().add(menuSelection);

     w.setVisible(true);
}   
}

1 个答案:

答案 0 :(得分:0)

您不需要在每个子面板上设置GridLayout。您应该只在mains上设置它,可能具有正确的行数和列数。

如果您只需要标签,可以直接将它们添加到主电源,并且应该为您提供标签。