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(); } } 
  • I solve the problem for the class Calculator from the book of J. Fain. NPE is displayed when adding buttons to the calculator panel. I would be grateful for any hint. - Ilya Lychkou
  • Possible duplicate question: What is Null Pointer Exception and how to fix it? - 0xdb

1 answer 1

You create a panel after the lines in which you add buttons to it.

move the creation of the panel above, above adding buttons to it + you have a wrong condition in the cycle i <= 9 , it causes an IndexOutOfBoundsException , it is better to write 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]); } 

Here is the complete code:

 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<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(); } } 

  • Thanks, it helped. - Ilya Lychkou
  • Confirmed your answer. - Ilya Lychkou
  • @IlyaLychkou please contact - Stranger in the Q