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
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
|