修改我的java swing计算器的图形

修改我的java swing计算器的图形,java,swing,graphics,jbutton,calculator,Java,Swing,Graphics,Jbutton,Calculator,我最近在修改swing计算器上按钮的大小时遇到了问题。如果你运行它,你会看到一个计算器,它的工作原理几乎和普通的windows计算器一样好。但我正试图让它看起来像一个普通的windows计算器。我已经写下了密码,我有几个问题 如果按两次equals,您会发现文本上的数字将设置为零。有人能给我一个提示来解决这个问题吗 如果您按两个连续的函数(exe.add然后乘法),您将看到它通常执行第一个函数。它应该执行按下的第二个功能。再说一次,有人能给我一个提示来解决这个问题吗 Ggraphics:如何调整

我最近在修改swing计算器上按钮的大小时遇到了问题。如果你运行它,你会看到一个计算器,它的工作原理几乎和普通的windows计算器一样好。但我正试图让它看起来像一个普通的windows计算器。我已经写下了密码,我有几个问题

  • 如果按两次equals,您会发现文本上的数字将设置为零。有人能给我一个提示来解决这个问题吗
  • 如果您按两个连续的函数(exe.add然后乘法),您将看到它通常执行第一个函数。它应该执行按下的第二个功能。再说一次,有人能给我一个提示来解决这个问题吗
  • Ggraphics:如何调整按钮的大小?我尝试调用buttons.resize(),它应该像在JavaAPI中一样工作,但由于某些原因,它没有效果
  • 如何将按钮上的文本设置为不同的颜色 顺便说一句,如果有人首先回答了图形问题,我相信我可以自己解决这个功能

       import java.awt.BorderLayout;
       import java.awt.Color;
       import java.awt.Container;
       import java.awt.FlowLayout;
       import java.awt.GridLayout;
       import java.awt.event.ActionEvent;
       import java.awt.event.ActionListener;
       import javax.swing.*;
       import java.awt.GridBagConstraints;
       import java.awt.Dimension;
    
        public class Calculator extends JFrame implements ActionListener
       {  
          JButton button1 = new JButton("1");
          JButton button2 = new JButton("2");
          JButton button3 = new JButton("3");
          JButton button4 = new JButton("4");
          JButton button5 = new JButton("5");
          JButton button6 = new JButton("6");
          JButton button7 = new JButton("7");
          JButton button8 = new JButton("8");
          JButton button9 = new JButton("9");
          JButton button0 = new JButton("0");
    
          JButton buttonAdd = new JButton("+");
          JButton buttonSub = new JButton("-");
          JButton buttonMult = new JButton("*");
          JButton buttonDiv = new JButton("/");
          JButton buttonEquals = new JButton("=");
          JButton buttonClear = new JButton("C");
    
          JButton plusOrMinus = new JButton("+/-");
          JButton decimal = new JButton(".");
          JButton squareRoot = new JButton("sqrt.");
          JButton inverse = new JButton("1/x");
          JButton mod = new JButton("%");
          JButton backSpace = new JButton("Backspace");
          JButton clearE = new JButton("CE");
    
          JButton memoryClear = new JButton("MC");
          JButton memoryRecall = new JButton("MR");
          JButton memoryStore = new JButton("MS");
          JButton memoryAdd = new JButton("M+");
    
          JPanel jBack = new JPanel();
          JLabel output = new JLabel("0");
          JPanel jSpacing = new JPanel();
          JPanel jMstr = new JPanel();
          JPanel buttonSpace = new JPanel();
    
          double firstNumber, memoryNumber;
          String opera = "0";
          boolean clear;
    
           public Calculator()
          {     
             output.setHorizontalTextPosition(JLabel.RIGHT);
             output.setBackground(Color.WHITE);
             output.setOpaque(true);
    
             getContentPane().add(output, BorderLayout.NORTH);
    
             jBack.setLayout(new GridLayout(1, 1, 2, 2));
             jBack.add(backSpace);
    
             jSpacing.setLayout(new GridLayout(1, 2, 2, 2));        
             jSpacing.add(clearE);
             jSpacing.add(buttonClear);
    
             buttonSpace.setLayout(new GridLayout(4, 5, 2, 2));
    
             buttonSpace.add(memoryClear);   
             buttonSpace.add(button7);
             buttonSpace.add(button8);
             buttonSpace.add(button9);
             buttonSpace.add(buttonDiv);
             buttonSpace.add(squareRoot);
    
             buttonSpace.add(memoryRecall);   
             buttonSpace.add(button4);
             buttonSpace.add(button5);
             buttonSpace.add(button6);
             buttonSpace.add(buttonMult);
             buttonSpace.add(inverse);
    
             buttonSpace.add(memoryStore);         
             buttonSpace.add(button1);
             buttonSpace.add(button2);
             buttonSpace.add(button3);
             buttonSpace.add(buttonSub);
             buttonSpace.add(mod);
    
             buttonSpace.add(memoryAdd);
             buttonSpace.add(button0);
             buttonSpace.add(plusOrMinus);
             buttonSpace.add(decimal);
             buttonSpace.add(buttonAdd);
             buttonSpace.add(buttonEquals);
    
             jMstr.setLayout(new BorderLayout());
             jMstr.add(jBack, BorderLayout.WEST);
             jMstr.add(jSpacing, BorderLayout.EAST);
             jMstr.add(buttonSpace, BorderLayout.SOUTH);
    
             getContentPane().add(jMstr, BorderLayout.SOUTH);
    
             button1.addActionListener(this);
             button2.addActionListener(this);
             button3.addActionListener(this);
             button4.addActionListener(this);
             button5.addActionListener(this);
             button6.addActionListener(this);
             button7.addActionListener(this);
             button8.addActionListener(this);
             button9.addActionListener(this);
             button0.addActionListener(this);
    
             buttonAdd.addActionListener(this);
             buttonSub.addActionListener(this);
             buttonMult.addActionListener(this);
             buttonDiv.addActionListener(this);
             buttonEquals.addActionListener(this);
             buttonClear.addActionListener(this);
    
             plusOrMinus.addActionListener(this);
             decimal.addActionListener(this);
             squareRoot.addActionListener(this);
             inverse.addActionListener(this);
             mod.addActionListener(this);
             backSpace.addActionListener(this);
             clearE.addActionListener(this);
    
             memoryClear.addActionListener(this);
             memoryRecall.addActionListener(this);
             memoryStore.addActionListener(this);
             memoryAdd.addActionListener(this);
    
             try
             {
                UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
             }
    
                 catch(Exception e)
                {
                }       
    
             SwingUtilities.updateComponentTreeUI(jMstr);       
          }
    
           public void actionPerformed(ActionEvent e)
          {
             double result = 0;
    
             if(e.getSource() == buttonEquals)
             {
                processEquals();
             }
    
             if(e.getSource() == button0)
             {
                putDigitOnLabel(0);
             }
    
             if(e.getSource() == button1)
             {
                putDigitOnLabel(1);
             }
    
             if(e.getSource() == button2)
             {
                putDigitOnLabel(2);
             }
    
             if(e.getSource() == button3)
             {
                putDigitOnLabel(3);
             }
    
             if(e.getSource() == button4)
             {
                putDigitOnLabel(4);
             }
    
             if(e.getSource() == button5)
             {
                putDigitOnLabel(5);
             }
    
             if(e.getSource() == button6)
             {
                putDigitOnLabel(6);
             }
    
             if(e.getSource() == button7)
             {
                putDigitOnLabel(7);
             }
    
             if(e.getSource() == button8)
             {
                putDigitOnLabel(8);
             }
    
             if(e.getSource() == button9)
             {
                putDigitOnLabel(9);
             }
    
             if(e.getSource() == plusOrMinus)
             {
                changeSign();
             }
    
             if(e.getSource() == decimal)
             {
                addDecimalPoint();
             }
    
             if(e.getSource() == buttonDiv)
             {
                if(getNumberInDisplay() == 0)
                {
                   output.setText("Cannot divide a number by zero.");
                }
                operation("/");
             }
    
             if(e.getSource() == buttonMult)
             {
                operation("*");
             }
    
             if(e.getSource() == buttonSub)
             {
                operation("-");
             }
    
             if(e.getSource() == buttonAdd)
             {
                operation("+");
             }
    
             if(e.getSource() == squareRoot)
             {
                if(getNumberInDisplay() < 0)
                {
                   output.setText("Cannot take the square root of a negative number.");
                }
    
                double num = Math.sqrt(Double.parseDouble(output.getText()));
                output.setText(Double.toString(num));
    
             }
    
             if(e.getSource() == inverse)
             {
                if(getNumberInDisplay() == 0)
                {
                   output.setText("Cannot take the inverse of the number zero");
                }
                double num = 1/( Double.parseDouble(output.getText()));
                output.setText(Double.toString(num));
             }
    
             if(e.getSource() == mod)
             {
                result = getNumberInDisplay() / 100;
                displayResult(result);
             }
    
             if(e.getSource() == backSpace)
             {
    
    
         setTextOnOutput(getStringOnDisplay().substring(0, getStringOnDisplay().length()-1));   
    
    
             }
    
             if(e.getSource() == clearE)
             {
                clearEverythingButOperation();
             }
    
             if(e.getSource() == buttonClear)
             {
                clearEverything();
             }  
    
             if(e.getSource() == memoryRecall)
             {
                displayResult(memoryNumber);
             }
    
             if(e.getSource() == memoryStore)
             {
                memoryNumber = getNumberInDisplay();
             }
    
             if(e.getSource() == memoryAdd)
             {
                memoryNumber += getNumberInDisplay();
             }   
    
             if(e.getSource() == memoryClear)
             {
                memoryNumber = 0;
             }                          
          } 
    
           public void setTextOnOutput(String s)
          {
             output.setText(s);
          }
    
           public String getStringOnDisplay()
          {
             return output.getText();
          }
    
           public void putDigitOnLabel(int digit)
          {
             if(clear == true)
             {
                output.setText("");
             }
    
             if(getStringOnDisplay().indexOf("0") == 0)
             {
                setTextOnOutput(getStringOnDisplay().substring(1));
             }
    
             output.setText(getStringOnDisplay() + digit);
    
             clear = false;
          }     
    
           public void addDecimalPoint()
          {
             if(clear == true)
             {
                setTextOnOutput("");
             }
    
             if(getStringOnDisplay().indexOf(".") == -1)
             {
                setTextOnOutput(new String(getStringOnDisplay() + "."));
             }
          }
    
           public void changeSign()
          {
             if(Double.parseDouble(output.getText()) < 0)
             {
                setTextOnOutput(getStringOnDisplay().substring(1));
             }
    
             if(Double.parseDouble(output.getText()) > 0)
             {
                setTextOnOutput(Double.toString(getNumberInDisplay() * -1));
             }    
          } 
    
           public void clearEverythingButOperation()
          {
             setTextOnOutput("0");
             clear = true;      
          }
    
           public void clearEverything()
          {
             setTextOnOutput("0");
             opera = "0";
             firstNumber = 0;
             clear = true;
          }
    
           public double getNumberInDisplay()
          {
             String stuff = output.getText();
             return Double.parseDouble(stuff);
          }
    
           public void operation(String s)
          {      
             double number = getNumberInDisplay();
    
             if(!(opera.equals("0")))
             {         
                double result = processOperator();
                displayResult(result);
                firstNumber = result;
             }
    
             else
             {
                firstNumber = number;
             }
    
             clear = true;
             opera = s;
          }
    
           public void processEquals()
          {
             double result;
    
             result = processOperator();
             displayResult(result);
    
             opera = "0";
          }
    
           public double processOperator()
          {    
             double answer = 0;
             double number = getNumberInDisplay();
    
             if(opera.equals("*"))
             {
    
                answer = firstNumber * number;
             }
    
             if(opera.equals("-"))
             {
                answer = firstNumber - number;
             }
    
             if(opera.equals("+"))
             {
                answer = firstNumber + number;
             }
    
             if(opera.equals("/"))
             {
                answer = firstNumber / number;
             }
    
             return answer;
          }
    
           public void displayResult(double result)
          {
             setTextOnOutput(Double.toString(result));
             firstNumber = result;
             clear = true;
          }
    
           public static void main(String args[])
          {
             Calculator f= new Calculator();
             f.setTitle("Windows Calculator");
             f.setSize(300, 300);
             f.pack();
             f.setVisible(true);
             f.setResizable(false);
          } 
       }
    
    导入java.awt.BorderLayout;
    导入java.awt.Color;
    导入java.awt.Container;
    导入java.awt.FlowLayout;
    导入java.awt.GridLayout;
    导入java.awt.event.ActionEvent;
    导入java.awt.event.ActionListener;
    导入javax.swing.*;
    导入java.awt.GridBagConstraints;
    导入java.awt.Dimension;
    公共类计算器扩展JFrame实现ActionListener
    {  
    JButton button1=新JButton(“1”);
    JButton button2=新JButton(“2”);
    JButton button3=新JButton(“3”);
    JButton button4=新JButton(“4”);
    JButton button5=新JButton(“5”);
    JButton button6=新JButton(“6”);
    JButton button7=新JButton(“7”);
    JButton button8=新JButton(“8”);
    JButton button9=新JButton(“9”);
    JButton button0=新JButton(“0”);
    JButton buttonad=新JButton(“+”);
    JButton buttonsb=新JButton(“-”);
    JButton buttonMult=新JButton(“*”);
    JButton buttonDiv=新JButton(“/”);
    JButton buttonEquals=新JButton(“=”);
    JButton buttonClear=新的JButton(“C”);
    JButton plusor减号=新JButton(“+/-”);
    JButton decimal=新JButton(“.”);
    JButton平方根=新JButton(“sqrt”);
    JButton inverse=新JButton(“1/x”);
    JButton mod=新JButton(“%”);
    JButton backSpace=新JButton(“backSpace”);
    JButton clearE=新JButton(“CE”);
    JButton memoryClear=新JButton(“MC”);
    JButton memoryRecall=新JButton(“MR”);
    JButton memoryStore=新JButton(“MS”);
    JButton memoryAdd=新JButton(“M+”);
    JPanel jBack=新的JPanel();
    JLabel输出=新JLabel(“0”);
    JPanel jspacking=新的JPanel();
    JPanel jMstr=新的JPanel();
    JPanel buttonSpace=新的JPanel();
    双首数字,memoryNumber;
    字符串opera=“0”;
    布尔清晰;
    公共计算器()
    {     
    output.setHorizontalTextPosition(JLabel.RIGHT);
    输出.立根背景(颜色.白色);
    output.set不透明(true);
    getContentPane().add(输出,BorderLayout.NORTH);
    setLayout(新的GridLayout(1,1,2,2));
    jBack.add(退格);
    setLayout(新的GridLayout(1,2,2,2));
    jspacking.add(clearE);
    jspacking.add(buttonClear);
    setLayout(新的GridLayout(4,5,2,2));
    按钮空间。添加(memoryClear);
    按钮空间。添加(按钮7);
    按钮空间。添加(按钮8);
    按钮空间。添加(按钮9);
    按钮空间。添加(buttonDiv);
    按钮空间。添加(平方根);
    按钮空间。添加(memoryRecall);
    按钮空间。添加(按钮4);
    按钮空间。添加(按钮5);
    按钮空间。添加(按钮6);
    按钮空间。添加(按钮结果);
    按钮空间。添加(反向);
    按钮空间。添加(memoryStore);
    按钮空间。添加(按钮1);
    按钮空间。添加(按钮2);
    按钮空间。添加(按钮3);
    buttonSpace.add(buttonSub);
    按钮空间。添加(mod);
    按钮空间。添加(memoryAdd);
    按钮空间。添加(按钮0);
    按钮空间。添加(加号或减号);
    按钮空间。添加(十进制);
    按钮空间。添加(按钮添加);
    按钮空间。添加(按钮相等);
    setLayout(新的BorderLayout());
    jMstr.add(jBack,BorderLayout.WEST);
    add(jspacking,BorderLayout.EAST);
    jMstr.add(按钮空间,BorderLayout.SOUTH);
    getContentPane().add(jMstr,BorderLayout.SOUTH);
    按钮1.addActionListener(此按钮);
    按钮2.addActionListener(此);
    按钮3.addActionListener(此);
    按钮4.addActionListener(此);
    按钮5.addActionListener(此);
    按钮6.addActionListener(此);
    按钮7.addActionListener(此);
    按钮8.addActionListener(此);
    按钮9.addActionListener(此);
    按钮0.addActionListener(此);
    ButtonAd.addActionListener(此);
    buttonSub.addActionListener(这个);
    buttonMult.addActionListener(此);
    buttonDiv.addActionListener(此);
    buttonEquals.addActionListener(此);
    buttonClear.addActionListener(此);
    plusor减号.addActionListener(this);
    decimal.addActionListener(this);
    平方根addActionListener(this);
    addActionListener(this);
    mod.addActionListener(此);
    backSpace.addActionListener(这个);
    clear.addActionListener(此);
    memoryClear.addActionListener(此);
    memoryRecall.addActionListener(此);
    addActionListener(这个);
    memoryAdd.addActionListener(此);
    尝试
    {
    UIManager.setLookAndFeel(“com.sun.java.swing.plaf.windows.WindowsLookAndFeel”);
    }
    捕获(例外e)
    {
    
    Font btnFont = UIManager.getFont("Button.font");
    float fontSize = 16f;
    btnFont = btnFont.deriveFont(fontSize);
    UIManager.put("Button.font", btnFont);