简体   繁体   English

如何设置按钮的大小? (摇摆)

[英]How can I set size of button? (Swing)

I'd like to fill right down corner with button "Equal" in the calculator. 我想在计算器中用“Equal”按钮填充右下角。 Now this button fills just 1/4 of this space. 现在这个按钮只占这个空间的1/4。 I've tried to fix it with setSize or setPreferedSize , but all that attempts failed. 我试图用setSizesetPreferedSize修复它,但所有尝试都失败了。 I'm really not familiar with Swing. 我真的不熟悉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;
    }


}

This: 这个:

在此输入图像描述

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 . 请注意,它也可以通过各种其他方式实现,包括使用单个GridBagLayout

See also this calculator example . 另请参阅此计算器示例 It uses ScriptEngine to evaluate the expression in the text field. 它使用ScriptEngine来评估文本字段中的表达式。

GridLayout does not support this. GridLayout不支持此功能。 You have to use other layout manager. 您必须使用其他布局管理器。 There is GridBagLayout in standard library, but it is not so easy to understand. 在标准库中有GridBagLayout ,但它并不容易理解。

I suggest MigLayout . 我建议MigLayout I didn't work with UI for long, but remember that it is pretty simple and allow to create complex UI. 我没有长时间使用UI,但请记住它非常简单并允许创建复杂的UI。

We have to use Gridbag layout . 我们必须使用Gridbag布局

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. 作为附加信息,如果您正在使用eclipse尝试窗口构建器来创建GUI。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM