JAVA 中的 GridBagLayout 问题
GridBagLayout issues in JAVA
我目前是 java 的新手,如果您不介意的话,我正在寻求帮助。
事先,我很抱歉 Google 驱动器链接,我的受欢迎程度不允许我 post 图片。
首先,我知道关于这个主题的其他 post 已经存在,但我没能找到合适的答案。
我的目标是使用 GridBagLayout 获得如下内容:https://drive.google.com/file/d/0BxoqzZbxl2ZoVWpqSTB5cjJCdkE/view?usp=sharing
我将 JLabel 用于文本区域,网格是 JButton 的网格 (它是 JButton 的二维 table)。
private String stateText = new String("STATE TEXT");
private String messageText = new String("MESSAGE TEXT");
BUTTONS = new JButton[3][3];
我创建了主容器、布局管理器和GridBagConstraints:
JPanel content = new JPanel();
content.setPreferredSize(new Dimension(200,150));
content.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
然后我初始化gbc:
gbc.gridx = 0;
gbc.gridy = 0;
然后我开始放置 JLabels:
stateField.setText(stateText);
stateField.setPreferredSize(new Dimension(50, 50));
stateField.setBorder(BorderFactory.createLineBorder(Color.cyan));
//la taille en hauteur et en largeur
gbc.gridheight = 1;
gbc.gridwidth = 1;
content.add(stateField, gbc);
messageField.setText(messageText);
messageField.setPreferredSize(new Dimension(50, 100));
messageField.setBorder(BorderFactory.createLineBorder(Color.cyan));
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 2;
//Celle-ci indique que la cellule se réplique de façon verticale
gbc.fill = GridBagConstraints.VERTICAL;
content.add(messageField, gbc);
带有 messageText 和 stateText,两个字符串。
我的问题是我使用了 2 'for' 来放置我的 BUTTONS[3][3],如下所示:
for(int i=1; i<4; i++)
for(int j=0; j<3; j++)
{
gbc.gridy = j;
gbc.gridx = i;
gbc.gridheight=j+1;
gbc.gridwidth=i+1;
if(i==3)
{
gbc.gridwidth = GridBagConstraints.REMAINDER;
}
if(j==2)
{
gbc.gridheight = GridBagConstraints.REMAINDER;
}
gbc.gridy = j-1;
gbc.gridx = i-1;
content.add(BUTTONS[i-1][j], gbc);
}
最后,结果不是预期的,确实,执行给了我这个:
https://drive.google.com/file/d/0BxoqzZbxl2ZoY3pRMVh1enVSWm8/view?usp=sharing
你能告诉我哪里错了吗?
有没有更好的方法呢?
您在这段代码中有错误:
gbc.gridy = j-1;
gbc.gridx = i-1;
content.add(BUTTONS[i-1][j], gbc);
gridy 正在为某些按钮设置为 -1。 (每当 j = 0 时)
我也不清楚您是希望 3x3 按钮形成大小相等的网格,还是希望某些按钮具有特殊尺寸。
如果您希望 3x3 按钮大小相同。使用 GridLayout(3,3) 构造另一个 JPanel 会更简单,您可以在其中添加这些按钮。然后您可以一次性将新的 JPanel 添加到您的主面板。
我目前是 java 的新手,如果您不介意的话,我正在寻求帮助。 事先,我很抱歉 Google 驱动器链接,我的受欢迎程度不允许我 post 图片。
首先,我知道关于这个主题的其他 post 已经存在,但我没能找到合适的答案。
我的目标是使用 GridBagLayout 获得如下内容:https://drive.google.com/file/d/0BxoqzZbxl2ZoVWpqSTB5cjJCdkE/view?usp=sharing
我将 JLabel 用于文本区域,网格是 JButton 的网格 (它是 JButton 的二维 table)。
private String stateText = new String("STATE TEXT");
private String messageText = new String("MESSAGE TEXT");
BUTTONS = new JButton[3][3];
我创建了主容器、布局管理器和GridBagConstraints:
JPanel content = new JPanel();
content.setPreferredSize(new Dimension(200,150));
content.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
然后我初始化gbc:
gbc.gridx = 0;
gbc.gridy = 0;
然后我开始放置 JLabels:
stateField.setText(stateText);
stateField.setPreferredSize(new Dimension(50, 50));
stateField.setBorder(BorderFactory.createLineBorder(Color.cyan));
//la taille en hauteur et en largeur
gbc.gridheight = 1;
gbc.gridwidth = 1;
content.add(stateField, gbc);
messageField.setText(messageText);
messageField.setPreferredSize(new Dimension(50, 100));
messageField.setBorder(BorderFactory.createLineBorder(Color.cyan));
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 1;
gbc.gridheight = 2;
//Celle-ci indique que la cellule se réplique de façon verticale
gbc.fill = GridBagConstraints.VERTICAL;
content.add(messageField, gbc);
带有 messageText 和 stateText,两个字符串。
我的问题是我使用了 2 'for' 来放置我的 BUTTONS[3][3],如下所示:
for(int i=1; i<4; i++)
for(int j=0; j<3; j++)
{
gbc.gridy = j;
gbc.gridx = i;
gbc.gridheight=j+1;
gbc.gridwidth=i+1;
if(i==3)
{
gbc.gridwidth = GridBagConstraints.REMAINDER;
}
if(j==2)
{
gbc.gridheight = GridBagConstraints.REMAINDER;
}
gbc.gridy = j-1;
gbc.gridx = i-1;
content.add(BUTTONS[i-1][j], gbc);
}
最后,结果不是预期的,确实,执行给了我这个: https://drive.google.com/file/d/0BxoqzZbxl2ZoY3pRMVh1enVSWm8/view?usp=sharing
你能告诉我哪里错了吗? 有没有更好的方法呢?
您在这段代码中有错误:
gbc.gridy = j-1;
gbc.gridx = i-1;
content.add(BUTTONS[i-1][j], gbc);
gridy 正在为某些按钮设置为 -1。 (每当 j = 0 时)
我也不清楚您是希望 3x3 按钮形成大小相等的网格,还是希望某些按钮具有特殊尺寸。
如果您希望 3x3 按钮大小相同。使用 GridLayout(3,3) 构造另一个 JPanel 会更简单,您可以在其中添加这些按钮。然后您可以一次性将新的 JPanel 添加到您的主面板。