Hello I have a big problem. I would like to make "=" button 2*height and the "0" button 2*width(OTHER buttons should be just normal size), that's all I tried many combinantions, but instead i get weird sizes.
O i get that
I would like to get sth similar to that I found in web(only button layout)
public void someMethod()
Container cp = getContentPane();
cp.setLayout(new BorderLayout());
JPanel wyswietlacz = new JPanel();
JTextField txt = new JTextField("123");
txt.setPreferredSize(new Dimension(getWidth() - 10, 35));
txt.setAlignmentX(JTextField.RIGHT_ALIGNMENT);
wyswietlacz.add(txt);
JPanel opcje = new JPanel();
String[] etykiety = { "C", ".", "/", "*", "7", "8", "9", "-", "4", "5",
"6", "+", "1", "2", "3", "=", "0", "+/-" };
JButton[] przyciski = new JButton[18];
for (int i = 0; i < przyciski.length; i++)
przyciski[i] = new JButton(etykiety[i]);
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
opcje.setLayout(gridbag);
for (int i = 0; i < przyciski.length; i++) {
if (((i + 1) % 4) == 0) {
c.gridwidth = GridBagConstraints.REMAINDER;
} else {
c.gridwidth = GridBagConstraints.RELATIVE;
}
if (i == 15) {
c.gridheight = 2;
c.fill = GridBagConstraints.HORIZONTAL;
}
if (i == 16)
c.gridy = GridBagConstraints.SOUTH;
if (i == 16) {
c.gridwidth = 2;
c.fill = GridBagConstraints.HORIZONTAL;
}
makebutton(przyciski[i], gridbag, c, opcje);
}
add(wyswietlacz, BorderLayout.NORTH);
add(opcje, BorderLayout.CENTER);
}
protected void makebutton(JButton button, GridBagLayout gridbag,
GridBagConstraints c, JPanel jp) {
gridbag.setConstraints(button, c);
jp.add(button);
}
public static void main(String[] args) {
new Kalkulator();
}
Try your hands on this code example and ask any questions that may arise :
Here is the output :
I can't see any issue with that, please read
How to Use GridBagLayout
GridBagConstraints and anchor too
then
from code
The problem is that you don't set weightx and weighty on the GridBagConstraints. Setting them to 1.0 will allocate the (horizontal/vertical) extra space to each component equally.