Почему мой JButton не показывает вывод на JTextFrame при клике даже при первом клике? - PullRequest
1 голос
/ 16 октября 2019

Здесь я пытаюсь создать калькулятор, как вы видите, я не могу написать код бога для своих действий над ним. Я хочу получить помощь по моим действиям, как: - 1). Когда я нажимаю на кнопку, она (номер знака, написанного над ней) появится в JTextField (tf), 2)Когда вывод появляется в JTextField, он должен выглядеть так:

1 Ответ

1 голос
/ 16 октября 2019

Вы не должны объявлять новые переменные в своем конструкторе, но должны использовать объявленное в объявлении класса.

Пример:

JButton b2=new JButton("C");

следует заменить на

b2=new JButton("C");

И т. Д.

Вот правильный пример:

package de.eurodata.commons.lookandfeel.ui.swing;

import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
public class Gui extends WindowAdapter implements ActionListener {
    JFrame fr;
    JPanel p1,p2;
    JLabel l1;
    JTextField tf;

    JButton b1, b2, b3, b4, b5, b6, b7, b8, b9, b10;
    JButton b00,b11,b22,b33,b44,b55,b66,b77,b88,b99;
    public Gui(){
        //Frame 
        fr=new JFrame("Calculator");
        fr.getContentPane().setBackground(Color.LIGHT_GRAY);
        //fr.setBackground(Color.black);
        //Panel
        p1=new  JPanel();
        p2=new  JPanel();
        p1.setBounds(5, 5, 375, 90);
        p1.setBackground(Color.gray);
        p2.setBounds(5, 115, 379, 390);
        p2.setBackground(Color.darkGray);
        //Label
        l1=new JLabel("Perform operations:");
        l1.setBounds(8, 91,200,23);
        //TextField to see performing operation
        tf=new JTextField("start",50);
        tf.setBounds( 5 , 5 , 365 , 80 );       
        //Calculator Button 
        b1=new JButton("CE");
        b1.setBounds(10, 10, 85, 70);
        b2 = new JButton("C");
        b2.setBounds(100, 10, 85, 70);
        b3 = new JButton("delete");
        b3.setBounds(190, 10, 85, 70);
        b4 = new JButton("%");
        b4.setBounds(280, 10, 90, 70);


        b99 = new JButton("9");
        b99.setBounds(10, 85, 85, 70);
        b88 = new JButton("8");
        b88.setBounds(100, 85, 85, 70);
        b77 = new JButton("7");
        b77.setBounds(190, 85, 85, 70);
        b5 = new JButton("*");
        b5.setBounds(280, 85, 90, 70);

        b66 = new JButton("6");
        b66.setBounds(10, 160, 85, 70);
        b55 = new JButton("5");
        b55.setBounds(100, 160, 85, 70);
        b44 = new JButton("4");
        b44.setBounds(190, 160, 85, 70);
        b6 = new JButton("-");
        b6.setBounds(280, 160, 90, 70);

        b33 = new JButton("3");
        b33.setBounds(10, 235, 85, 70);
        b22 = new JButton("2");
        b22.setBounds(100, 235, 85, 70);
        b11 = new JButton("1");
        b11.setBounds(190, 235, 85, 70);
        b7 = new JButton("+");
        b7.setBounds(280, 235, 90, 70);

        b8 = new JButton("00");
        b8.setBounds(10, 310, 85, 70);
        b00 = new JButton("0");
        b00.setBounds(100, 310, 85, 70);
        b9 = new JButton(".");
        b9.setBounds(190, 310, 85, 70);
        b10 = new JButton("=");
        b10.setBounds(280, 310, 90, 70);
        //Add action listeners
        b1.addActionListener(this);
        b2.addActionListener(this);
        b3.addActionListener(this);
        b4.addActionListener(this);
        b5.addActionListener(this);
        b6.addActionListener(this);
        b7.addActionListener(this);
        b8.addActionListener(this);
        b9.addActionListener(this);
        b00.addActionListener(this);
        b11.addActionListener(this);
        b22.addActionListener(this);
        b33.addActionListener(this);
        b44.addActionListener(this);
        b55.addActionListener(this);
        b66.addActionListener(this);
        b77.addActionListener(this);
        b88.addActionListener(this);
        b99.addActionListener(this);

        fr.setResizable(false);
        fr.setLayout(null);//Always before adding components..
        p1.setLayout(null);
        p2.setLayout(null);
        tf.setFont(new Font("Courier", Font.BOLD,12));
        fr.add(p1);p1.add(tf);
        fr.add(l1);
        fr.add(p2);p2.add(b1);p2.add(b2);p2.add(b3);p2.add(b4);
        p2.add(b99);p2.add(b88);p2.add(b77);p2.add(b5);
        p2.add(b66);p2.add(b55);p2.add(b44);p2.add(b6);
        p2.add(b33);p2.add(b22);p2.add(b11);p2.add(b7);
        p2.add(b8);p2.add(b00);p2.add(b9);p2.add(b10);
        fr.setVisible(true);
        fr.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        fr.setSize(405, 550);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println(tf.getText());
        System.out.println(e.getSource());
        if(e.getSource()==b99) 
            tf.setText(tf.getText() +"9");
        if(e.getSource()==b88) 
            tf.setText(tf.getText() +"8");
        if(e.getSource()==b77) 
            tf.setText(tf.getText() +"7");
        if(e.getSource()==b66) 
            tf.setText(tf.getText() +"6");
        if(e.getSource()==b55) 
            tf.setText(tf.getText() +"5");
        if(e.getSource()==b44) 
            tf.setText(tf.getText() +"4");
        if(e.getSource()==b33) 
            tf.setText(tf.getText() +"3");
        if(e.getSource()==b22) 
            tf.setText(tf.getText() +"2");
        if(e.getSource()==b11) 
            tf.setText(tf.getText() +"1");
        if(e.getSource()==b00) 
            tf.setText(tf.getText() +"0");  
        System.out.println("After: " + tf.getText());
    }
    public static void main(String[] args) {
        new Gui();
    }
}

ВАЖНО : поскольку это уже было предложено вам, пожалуйста, узнайте о менеджерах компоновки, потому что setLayout(null) очень плохая практика для свинга!

...