1
import javax.swing.*;
import java.awt.GridLayout;
import java.awt.BorderLayout;
import java.awt.Component;

public class Calculator {
// объявление всех компонентов калькулятора
JPanel windowContent; // контейнер панели
//JTextField displayField; // поле отображения цифр
JFormattedTextField displayField; // форматируемое поле отображения цифр


JButton[] numButtons; // кнопки с 0 по 9
JButton buttonPoint; // кнопка "."

JButton buttonEqual; // кнопка "="
JButton buttonPlus; // кнопка "+"
JButton buttonMinus; // кнопка "-"
JButton buttonSlash; // кнопка "/"
JButton buttonStar; // кнопка "*"

JPanel p1; // левая панель с цифровыми кнопками
JPanel p2; // правая панель

// в конструкторе создаются все компоненты
// и добавляются на фрейм с помощью комбинации
// BorderLayout и GridLayout

Calculator () {
    windowContent = new JPanel();

    // задаем схему для этой панели
    BorderLayout bl = new BorderLayout();
    windowContent.setLayout(bl);
    //создаем и отображаем поле
    // добавляем его в Северную область экрана

    //numPeriodsField = new JFormattedTextField();
    //  numPeriodsField.setValue(new Integer(numPeriods));
    // numPeriodsField.setColumns(10);


    // displayField = new JTextField(30);
    displayField = new JFormattedTextField();
    displayField.setColumns(30);
    displayField.setHorizontalAlignment(SwingConstants.RIGHT);
    windowContent.add("North",displayField);

    //создаем кнопки, используя конструктор
    // класс JButton , который принимает текст
    //кнопки в качестве параметра

    //Buttons numButton [] = new Buttons [10];
    //numButtons = new Buttons[10];
    // JButton numButtons [] = new JButton [10];
    //
    //int s  = numButtons.length;

    numButtons = new JButton[9];

    for (int i=0; i<=9;i++){
        numButtons[i] = new JButton();
        p1.add(numButtons[i]);
    }
    buttonPoint=new JButton(".");
    buttonEqual=new JButton("=");

    buttonPlus=new JButton("+");
    buttonMinus=new JButton("-");
    buttonSlash=new JButton("/");
    buttonStar=new JButton("*");

// Создаём панель с GridLayout
// которая содержит 12 кнопок - 10 кнопок с числами
// и кнопки с точкой и знаком равно
    p1 = new JPanel();
    GridLayout gl =new GridLayout(4,3);
    p1.setLayout(gl);


// добавляем кнопки на панель pl
    p1.add(buttonPoint);
    p1.add(buttonEqual);

//помещаем панель  pl в центральную область окна
    windowContent.add("Center",p1);

//создаем панель с GridLayout
//которая содержит 4 кнопок
    p2 = new JPanel();
    gl = new GridLayout(4,1);
    p2.setLayout(gl);
// добавляем кнопки на панель pl
    p2.add(buttonPlus);
    p2.add(buttonMinus);
    p2.add(buttonSlash);
    p2.add(buttonStar);

//помещаем панель  p2 в центральную область окна
    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();
} 
}

1 Answers1

0

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

переместите создание панели выше, над добавлением в нее кнопок + у Вас не верное условие в цикле i <= 9, оно вызывает IndexOutOfBoundsException, лучше написать i<numButtons.length

p1 = new JPanel();
numButtons = new JButton[9];
...
for (int i=0; i<numButtons  ;i++) { 
    numButtons[i] = new JButton();
    p1.add(numButtons[i]);
}

Вот код целиком:

import javax.swing.*;
import java.awt.*;

public class Calculator { // объявление всех компонентов калькулятора JPanel windowContent; // контейнер панели //JTextField displayField; // поле отображения цифр JFormattedTextField displayField; // форматируемое поле отображения цифр

JButton[] numButtons; // кнопки с 0 по 9 JButton buttonPoint; // кнопка "."

JButton buttonEqual; // кнопка "=" JButton buttonPlus; // кнопка "+" JButton buttonMinus; // кнопка "-" JButton buttonSlash; // кнопка "/" JButton buttonStar; // кнопка "*"

JPanel p1; // левая панель с цифровыми кнопками JPanel p2; // правая панель

// в конструкторе создаются все компоненты // и добавляются на фрейм с помощью комбинации // BorderLayout и GridLayout

Calculator () { windowContent = new JPanel();

// задаем схему для этой панели
BorderLayout bl = new BorderLayout();
windowContent.setLayout(bl);
//создаем и отображаем поле
// добавляем его в Северную область экрана

//numPeriodsField = new JFormattedTextField();
//  numPeriodsField.setValue(new Integer(numPeriods));
// numPeriodsField.setColumns(10);


// displayField = new JTextField(30);
displayField = new JFormattedTextField();
displayField.setColumns(30);
displayField.setHorizontalAlignment(SwingConstants.RIGHT);
windowContent.add("North",displayField);

//создаем кнопки, используя конструктор
// класс JButton , который принимает текст
//кнопки в качестве параметра

//Buttons numButton [] = new Buttons [10];
//numButtons = new Buttons[10];
// JButton numButtons [] = new JButton [10];
//
//int s  = numButtons.length;

// Создаём панель с GridLayout // которая содержит 12 кнопок - 10 кнопок с числами // и кнопки с точкой и знаком равно p1 = new JPanel(); GridLayout gl =new GridLayout(4,3); p1.setLayout(gl); numButtons = new JButton[9];

for (int i=0; i&lt;numButtons; i++){
    numButtons[i] = new JButton();
    p1.add(numButtons[i]);
}
buttonPoint=new JButton(".");
buttonEqual=new JButton("=");

buttonPlus=new JButton("+");
buttonMinus=new JButton("-");
buttonSlash=new JButton("/");
buttonStar=new JButton("*");




// добавляем кнопки на панель pl p1.add(buttonPoint); p1.add(buttonEqual);

//помещаем панель pl в центральную область окна windowContent.add("Center",p1);

//создаем панель с GridLayout //которая содержит 4 кнопок p2 = new JPanel(); gl = new GridLayout(4,1); p2.setLayout(gl); // добавляем кнопки на панель pl p2.add(buttonPlus); p2.add(buttonMinus); p2.add(buttonSlash); p2.add(buttonStar);

//помещаем панель p2 в центральную область окна 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(); } }