【发布时间】:2017-06-14 21:22:04
【问题描述】:
我遇到了 GridBagLayout() 的问题,并且列宽均匀。本质上,我将三个按钮添加到带有 GridBagLayout 布局管理器的面板中。我希望(希望)按钮的宽度相同,并填充它们所在的单元格。但是,由于按钮的大小不同(取决于其中的文本),我最终会得到不同大小的按钮.下面是代码:
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
public class ShitHeadGUI extends JPanel {
public String[] s = new String[] {"Ace of Hearts", "2 of Diamonds", "3 of Clubs"};
//JPanel pile = new JPanel();
List<JPanel> hands = new ArrayList<JPanel>();
GridBagConstraints cons = new GridBagConstraints();
JFrame frame = new JFrame("Shithead");
public ShitHeadGUI() {
this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
this.setPreferredSize(new Dimension(300,300));
cons.gridx = 0;
cons.gridy = 0;
cons.weightx = 1;
cons.fill = GridBagConstraints.HORIZONTAL;
for (int i = 0; i < 2; i++) {
hands.add(new JPanel());
hands.get(i).setLayout(new GridBagLayout());
this.add(hands.get(i));
cons.gridy++;
}
frame.setVisible(true);
frame.add(this);
frame.pack();
addCards(null);
}
public void addCards(Hand h) {
List<JButton> btnCard = new ArrayList<JButton>();
for (int i = 0; i < 3; i++) {//h.size(); i++) {
cons.gridx = i;
//btnCard.add(new JButton(h.getCard(i).toString()));
btnCard.add(new JButton(s[i]));
hands.get(0).add(btnCard.get(i), cons);
}
}
}
“红桃 A”与“方块 2”的大小略有不同,“梅花 3”明显更小。我希望它们都具有相同的大小。任何帮助将不胜感激,谢谢!
【问题讨论】:
-
GridBagLayout永远不会使所有列的宽度相同。 GridBagLayout 单元格是灵活的;它们的大小总是取决于它们的内容。没有 GridBagConstraints 值可以改变这种行为。正如 Aubin 所说,使用 GridLayout 而不是 GridBagLayout。或者,如果您想要挑战,请使用 SpringLayout。
-
按钮数量变化
-
我的建议:找出最长的卡片名称字符串是什么。将此值用作静态最终值进行比较。编写一个方法,在将每个卡片名称添加到按钮之前将其传递给该方法。该方法应该检查长度。如果名称的长度低于最大值,则让该方法添加空格,然后返回“更正后的”字符串。将其添加到按钮。这有点老套,但可以解决您的问题。
标签: java gridbaglayout