我目前有一个JButtons数组,我想把它们放在我的JPanel中两列,均匀分割。因此,如果阵列中有8个按钮,则左列中将有4个按钮,右列中将有4个按钮。但是,如果数组中有7个按钮,则左列将有4个按钮,右列将有3个按钮。
我开始为这样的场景创建一些基本逻辑,并想知道我所编写的代码中是否存在任何逻辑错误(或者更好的方法)。
以下是我提出的代码
public class SwingTest {
public static void main(String[] args) {
JFrame frame = new JFrame();
JButton b1 = new JButton();
b1.setText("Button1");
JButton b2 = new JButton();
b2.setText("Button2");
JButton b3 = new JButton();
b3.setText("Button3");
JButton b4 = new JButton();
b4.setText("Button4");
JButton b5 = new JButton();
b5.setText("Button5");
JButton b6 = new JButton();
b6.setText("Button6");
ArrayList<JButton> jButtonList = new ArrayList();
jButtonList.add(b1);
jButtonList.add(b2);
jButtonList.add(b3);
jButtonList.add(b4);
jButtonList.add(b5);
jButtonList.add(b6);
JPanel panel = new JPanel();
panel.setLayout(new java.awt.GridBagLayout());
double halfList = Math.ceil((jButtonList.size() / 2.0));
int gridX = 0, gridY = 0;
for(int i = 0; i < jButtonList.size(); i++) {
GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints();
if(gridY == (int)halfList) {
gridX++;
gridY = 0;
}
gridBagConstraints.gridx = gridX;
gridBagConstraints.gridy = gridY;
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
gridBagConstraints.insets = new java.awt.Insets(1, 0, 1, 0);
panel.add(jButtonList.get(i), gridBagConstraints);
gridY++;
}
frame.add(panel);
frame.pack();
frame.setVisible(true);
}
}
示例代码似乎工作正常,但是会不会出现打嗝的情况?
答案 0 :(得分:4)
你可以使用带有GridLayout的JPanel在其构造函数中传递0行,其中包含2列:
JPanel panel = new JPanel(new GridLayout(0 ,2));
这意味着当您向其添加组件时,面板的高度会增加,同时始终保持2列
添加JButton的代码将如此简单:
for(int i = 0; i < jButtonList.size(); i++) {
panel.add(jButtonList.get(i));
}
答案 1 :(得分:1)
使用GridBagLayout
这似乎是一个很好的计划。
但是,我会稍微清理按钮构建代码。如果您需要100个按钮会怎样?手动添加100个按钮似乎不是一个好主意。我会有一个参数化的方法来构建和返回一个按钮,以及一个循环,用于将按钮添加到ArrayList
。