Cherik
Cherik

Reputation: 31

How can I set size of button? (Swing)

I'd like to fill right down corner with button "Equal" in the calculator. Now this button fills just 1/4 of this space. I've tried to fix it with setSize or setPreferedSize, but all that attempts failed. I'm really not familiar with Swing.

What should I do? What should I adjust?

    public class Calculator implements ActionListener{

    JPanel windowContent;
    JTextField displayField;
    JButton[] button = new JButton[10];
    JButton buttonPoint;
    JButton buttonEqual;
    JButton buttonPlus;
    JButton buttonMinus;
    JButton buttonMultiply;
    JButton buttonDivide;
    JButton buttonClean;
    JPanel p1;
    JPanel p2;
    JPanel p3;
    int temp;
    double firstNum;
    double secondNum;
    String operation;
    ArrayList<String> mathOperation; 

    Calculator(){
            temp = 0;
            windowContent= new JPanel();

            BorderLayout bl= new BorderLayout();
            windowContent.setLayout(bl);

            displayField = new JTextField(30);
            displayField.setText("");
            windowContent.add("North", displayField);


            for(int i = 0; i < 10; i++) {
                button[i] = new JButton(""+i);
                button[i].addActionListener(this);
            }

            buttonPoint= new JButton(".");
            buttonEqual= new JButton("=");
            buttonEqual.setSize(80, 80);
            buttonPlus= new JButton("+");
            buttonMinus= new JButton("-");
            buttonMultiply= new JButton("*");
            buttonDivide= new JButton("/");
            buttonClean = new JButton("C");

            buttonEqual.setSize(100,200);

           buttonPoint.addActionListener(this);
           buttonEqual.addActionListener(this);
           buttonPlus.addActionListener(this);
           buttonMinus.addActionListener(this);
            buttonMultiply.addActionListener(this);
           buttonDivide.addActionListener(this);
           buttonClean.addActionListener(this);


            p1=new JPanel();
            GridLayout gl= new GridLayout(4,3);
            p1.setLayout(gl);

            for(int i = 1; i <= 10; i++) {
                if(i==10)
                    p1.add(button[0]);
                else
                    p1.add(button[i]);
            }
            p1.add(buttonPoint);
            p1.add(buttonClean);

            windowContent.add("Center",p1);
            p2= new JPanel();
            p2.setLayout(gl);
            p2.add(buttonMinus);
            p2.add(buttonPlus);
            p2.add(buttonDivide);
            p2.add(buttonMultiply);
            p2.add(buttonEqual);
            windowContent.add("East",p2);

            JFrame frame= new JFrame("Calculator");
            frame.setContentPane(windowContent);

            frame.pack();

            frame.setVisible(true);


    }
    public static void main(String[] args){
            Calculator calc= new Calculator();      
    }


    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource() == button[0])
            displayField.setText(displayField.getText() + "0");
        if(e.getSource() == button[1])
            displayField.setText(displayField.getText() + "1");
        if(e.getSource() == button[2])
            displayField.setText(displayField.getText() + "2");
        if(e.getSource() == button[3])
            displayField.setText(displayField.getText() + "3");
        if(e.getSource() == button[4])
            displayField.setText(displayField.getText() + "4");
        if(e.getSource() == button[5])
            displayField.setText(displayField.getText() + "5");
        if(e.getSource() == button[6])
            displayField.setText(displayField.getText() + "6");
        if(e.getSource() == button[7])
            displayField.setText(displayField.getText() + "7");
        if(e.getSource() == button[8])
            displayField.setText(displayField.getText() + "8");
        if(e.getSource() == button[9])
            displayField.setText(displayField.getText() + "9");

        if(e.getSource() == buttonPlus)
        {
            firstNum = Double.parseDouble(displayField.getText());
            displayField.setText("");
            operation = "+";
        }
        if(e.getSource() == buttonMinus)
        {
            firstNum = Double.parseDouble(displayField.getText());
            displayField.setText("");
            operation = "-";
        }
        if(e.getSource() == buttonMultiply)
        {
            firstNum = Double.parseDouble(displayField.getText());
            displayField.setText("");
            operation = "*";
        }
        if(e.getSource() == buttonDivide)
        {
            firstNum = Double.parseDouble(displayField.getText());
            displayField.setText("");
            operation = "/";
        }
        if(e.getSource() == buttonEqual)
        {
            secondNum = Double.parseDouble(displayField.getText());
        if(operation == "+")
            displayField.setText(firstNum+secondNum+"");
        if(operation == "-")
            displayField.setText(firstNum-secondNum+"");
        if(operation == "*")
            displayField.setText(firstNum*secondNum+"");
        if(operation == "/")
            displayField.setText(firstNum/secondNum+"");
        }
        if(e.getSource() == buttonClean)
        {
            String tmp = displayField.getText();
            String temp = tmp.substring(0, tmp.length() -1);
            displayField.setText(temp);
        }
    }

    public double result(ArrayList s)
    {
        double res =0;
        for(int i =0; i< s.size(); i++)
        {
            if(s.get(i).equals("+"))
            {
                res = Double.parseDouble(mathOperation.get(i-1)) + Double.parseDouble(mathOperation.get(i+1));
            }
        }
        return res;
    }


}

Upvotes: 1

Views: 3504

Answers (3)

Andrew Thompson
Andrew Thompson

Reputation: 168825

This:

enter image description here

Can be achieved like this..

    windowContent.add(p1, BorderLayout.CENTER);
    p2 = new JPanel();
    p2.setLayout(new GridLayout(0,2));
    p2.add(buttonMinus);
    p2.add(buttonPlus);
    p2.add(buttonDivide);
    p2.add(buttonMultiply);
    //p2.add(buttonEqual);  // Oops.. slight correction here!

    //windowContent.add("East", p2);

    JPanel pEast = new JPanel(new GridLayout(0, 1));
    windowContent.add(pEast, BorderLayout.EAST);
    pEast.add(p2);
    pEast.add(buttonEqual);

Note that it can also be achieved various other ways, including by using a single GridBagLayout.

See also this calculator example. It uses ScriptEngine to evaluate the expression in the text field.

Upvotes: 2

Nandha
Nandha

Reputation: 882

We have to use Gridbag layout .

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.JButton;
import javax.swing.JFrame;

public class TestFrame extends JFrame {
    public TestFrame() {
        GridBagLayout gridBagLayout = new GridBagLayout();
        getContentPane().setLayout(gridBagLayout);

        JButton btn1 = new JButton("1");
        GridBagConstraints gbc_btn1 = new GridBagConstraints();
        gbc_btn1.insets = new Insets(0, 0, 5, 5);
        gbc_btn1.gridx = 0;
        gbc_btn1.gridy = 0;
        getContentPane().add(btn1, gbc_btn1);

        JButton btn2 = new JButton("2");
        GridBagConstraints gbc_btn2 = new GridBagConstraints();
        gbc_btn2.insets = new Insets(0, 0, 5, 0);
        gbc_btn2.gridx = 1;
        gbc_btn2.gridy = 0;
        getContentPane().add(btn2, gbc_btn2);

        JButton btn3 = new JButton("3");
        GridBagConstraints gbc_btn3 = new GridBagConstraints();
        gbc_btn3.gridwidth = 2;
        gbc_btn3.fill = GridBagConstraints.HORIZONTAL;
        gbc_btn3.insets = new Insets(0, 0, 0, 5);
        gbc_btn3.gridx = 0;
        gbc_btn3.gridy = 1;
        getContentPane().add(btn3, gbc_btn3);
    }

}

As an additional info, if you are using eclipse try window builder for GUI creation purposes.

Upvotes: 0

talex
talex

Reputation: 20455

GridLayout does not support this. You have to use other layout manager. There is GridBagLayout in standard library, but it is not so easy to understand.

I suggest MigLayout. I didn't work with UI for long, but remember that it is pretty simple and allow to create complex UI.

Upvotes: 1

Related Questions