Проблема с текстом, не показываемым на калькуляторе GUI Java - PullRequest
0 голосов
/ 14 октября 2019

Когда я запускаю программу, появляется GUI. Когда я нажимаю на кнопки, на экране ничего не появляется. В моем методе выполнения действия экран не разрешается, потому что я не объявил его в методе. screen объявлен в моем методе init в начале.

Я не понимаю, как мой код во втором методе будет применен к первому методу (GUI).

какие-либо советы?

import acm.program.*;
import javax.swing.*;
import java.awt.*;    // for graphics 
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import acm.gui.*;
public class Calculator extends DialogProgram implements ActionListener{ 
    public void init() {


    JButton b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,bm,bd,ba,bs,bdec,bc;
    DoubleField screen;


    //create a panel 


    JPanel P= new JPanel();     // main panel 

    JPanel P1= new JPanel();    // panel for buttons 

    JPanel P2= new JPanel();    // panel for screen




    // adding panel to dialog box

    add(P);        // main panel 
    P.add(P2);     // adding screen
    P.add(P1);     // adding panel of buttons 

    // set panel color 
    P.setBackground(Color.yellow);                 



    // grid layout for buttons 

    P1.setLayout(new GridLayout(4,4,4,4));           // layout for button panel 
    P.setLayout(new GridLayout(2,1));                // layout for main panel 

    // create screen 
    screen = new DoubleField();                      // creating screen 
    screen.setPreferredSize(new Dimension(200,40));  // setting screen size 
    screen.setEditable(false);                       // screen can not be edited 




    // integer buttons 
    b0 = new JButton("0");
    b1 = new JButton("1");
    b2 = new JButton("2");
    b3 = new JButton("3");
    b4 = new JButton("4");
    b5 = new JButton("5");
    b6 = new JButton("6");
    b7 = new JButton("7");
    b8 = new JButton("8");
    b9 = new JButton("9");

    // operator buttons 
    bm = new JButton("*");
    bd= new  JButton("/");
    ba = new JButton("+");
    ba.addActionListener(this); 
    bs = new JButton("-");

    // decimal button 
    bdec = new JButton(".");

    // clear button
    bc = new JButton("C");


    // adding buttons to panel 
    P2.add(screen);
    P1.add(b7);
    P1.add(b8);
    P1.add(b9);
    P1.add(bm);
    P1.add(b4);
    P1.add(b5);
    P1.add(b6);
    P1.add(bd);
    P1.add(b1);
    P1.add(b2);
    P1.add(b3);
    P1.add(ba);
    P1.add(bc);
    P1.add(b0);
    P1.add(bdec);
    P1.add(bs);

    // adding action listeners 
     bm.addActionListener(this); 
     bd.addActionListener(this); 
     bs.addActionListener(this); 

     b9.addActionListener(this); 
     b8.addActionListener(this); 
     b7.addActionListener(this); 
     b6.addActionListener(this); 
     b5.addActionListener(this); 
     b4.addActionListener(this); 
     b3.addActionListener(this); 
     b2.addActionListener(this); 
     b1.addActionListener(this); 
     b0.addActionListener(this); 
     bdec.addActionListener(this); 
     bc.addActionListener(this); 




     addActionListeners();


    } // close 


    public void actionPerformed (ActionEvent e) {
         String clicked =e.getActionCommand();
         if (clicked.equals("ba")) {
             screen.setText("+");
         }

    }   



} /*Class*/

1 Ответ

0 голосов
/ 14 октября 2019

Переместите объявления переменных для всех ваших компонентов GUI из метода init(), но все еще в пределах класса Calculator, чтобы они были видны другим методам (таким как actionPerformed), которые могут понадобитьсяполучить к ним доступ:

public class Calculator extends DialogProgram implements ActionListener{ 

    JButton b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,bm,bd,ba,bs,bdec,bc;
    DoubleField screen;
    JPanel P, P1, P2;

    public void init() { 
        P= new JPanel();     // main panel 
        P1= new JPanel();    // panel for buttons 
        P2= new JPanel();    // panel for screen
        // continue setting up the rest of the GUI...
    }

    public void actionPerformed (ActionEvent e) {
         String clicked = e.getActionCommand();
         if (clicked.equals("ba")) {
             screen.setText("+");
         }
    }   
}
...