我使用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中。
答案 0 :(得分:0)
你似乎正在使用我不知道的GridBagConstraints子类(变量pos
),尽管我可以从上下文中猜出它的功能。
假设您的问题是您希望candidates
面板位于cellPanel
的左侧,而不是位于其上方,则需要交换添加candPanel
和new 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());