使用GridLayout垂直对齐jpanel的组件

时间:2012-03-25 18:45:21

标签: java swing grid-layout

我使用java swing库将KenKen作为我的学期项目。为了对齐,我使用了gridbag和gridlayout,但现在我想在UI中再添加一个JPanel组件。这些屏幕截图将使问题更加清晰:

Before I click on the button in the lowest panel below http://i41.tinypic.com/288jo9.png

现在我选择要在最左侧面板中添加相应候选者的网格单元格。

This is what happens when I click the number buttons 2, 3, 4 http://i41.tinypic.com/14scr9e.png

它扰乱了网格和面板的相邻对齐。

以下是具有各自布局的面板:

 JPanel buttonPanel = new JPanel();
 buttonPanel.setLayout(new GridLayout(1, 4, 5, 5));
 buttonPanel.setPreferredSize(new Dimension(20,40));
 buttonPanel.add(undoButton);
 buttonPanel.add(redoButton);
 buttonPanel.add(eraseButton);
 buttonPanel.add(hintButton);

 JPanel cellPanel = new JPanel();
 cellPanel.setName("cellPanel");
 cellPanel.setLayout(new GridLayout(pSize, pSize, 0, 0));

 JPanel numPanel = new JPanel();
 numPanel.setName("numPanel");
 numPanel.setLayout(new GridLayout(1,1,5,5));
 numPanel.setPreferredSize((new Dimension(50,60)));

 JPanel candPanel = new JPanel();
 candPanel.setName("candidatesPanel");
 JLabel candidates = new JLabel("Candidates");
 candidates.setFont(new Font("Courier New", Font.ITALIC, 14));
 candidates.setForeground(Color.GRAY);
 candPanel.setLayout(new GridLayout(0,1));
 candPanel.add(candidates);

然后全部进入内容面板:

 content.add(buttonPanel, pos.nextCol().expandW());
 content.add(candPanel, pos.nextRow());
 content.add(new Gap(GAP) , pos.nextRow());  // Add a gap below
 content.add(cellPanel, pos.nextCol());
 content.add(numPanel,pos.nextCol().expandW());

这些按钮都是在运行时生成的,它们被添加到动作监听器中的candPanel中。

1 个答案:

答案 0 :(得分:0)

你似乎正在使用我不知道的GridBagConstraints子类(变量pos),尽管我可以从上下文中猜出它的功能。

假设您的问题是您希望candidates面板位于cellPanel的左侧,而不是位于其上方,则需要交换添加candPanelnew Gap(GAP)如下:

content.add(buttonPanel, pos.nextCol().expandW());
content.add(new Gap(GAP), pos.nextRow());   // These two lines
content.add(candPanel, pos.nextRow());      // swapped over
content.add(cellPanel, pos.nextCol());
content.add(numPanel,pos.nextCol().expandW());