前提・実現したいこと
電卓の表示部分を
「計算表示」
「数字表示」
と2分割して表示させたいです。
発生している問題・エラーメッセージ
該当のソース
java
1package dentaku; 2 3import java.awt.*; 4import java.awt.event.*; 5import javax.swing.*; 6 7public class DentakuFrame extends JFrame { 8 private static final long serialVersionUID = 1L; 9 10 JPanel contentPane = new JPanel(); 11 BorderLayout borderLayout1 = new BorderLayout(); 12 JTextField result = new JTextField(""); //計算結果を表示するテキストフィールド 13 double stackedValue = 0.0; //演算子ボタンを押す前にテキストフィールドにあった値 14 boolean isStacked = false; //stackedValueに数値を入力したかどうか 15 boolean afterCalc = false; //演算子ボタンを押した後かどうか 16 String currentOp = ""; //押された演算子ボタンの名前 17 18 //フレームのビルド 19 public DentakuFrame() { 20 contentPane.setLayout(borderLayout1); 21 this.setSize(new Dimension(250, 300)); 22 this.setTitle("電子式卓上計算機"); 23 this.setContentPane(contentPane); 24 25 contentPane.add(result, BorderLayout.NORTH); //テキストフィールドを配置 26 27 JPanel keyPanel = new JPanel(); //ボタンを配置するパネルを用意 28 keyPanel.setLayout(new GridLayout(4, 4)); //4行4列のGridLayoutにする 29 contentPane.add(keyPanel, BorderLayout.CENTER); 30 31 keyPanel.add(new NumberButton("7"), 0); //ボタンをレイアウトにはめこんでいく 32 keyPanel.add(new NumberButton("8"), 1); 33 keyPanel.add(new NumberButton("9"), 2); 34 keyPanel.add(new CalcButton("÷"), 3); 35 keyPanel.add(new NumberButton("4"), 4); 36 keyPanel.add(new NumberButton("5"), 5); 37 keyPanel.add(new NumberButton("6"), 6); 38 keyPanel.add(new CalcButton("×"), 7); 39 keyPanel.add(new NumberButton("1"), 8); 40 keyPanel.add(new NumberButton("2"), 9); 41 keyPanel.add(new NumberButton("3"), 10); 42 keyPanel.add(new CalcButton("-"), 11); 43 keyPanel.add(new NumberButton("0"), 12); 44 keyPanel.add(new NumberButton("."), 13); 45 keyPanel.add(new CalcButton("+"), 14); 46 keyPanel.add(new CalcButton("="), 15); 47 48 contentPane.add(new ClearButton(), BorderLayout.SOUTH);//Cボタンを配置する 49 this.setVisible(true); 50 } 51 52 /* テキストフィールドに引数の文字列をつなげる */ 53 public void appendResult(String c) { 54 if (!afterCalc) //演算子ボタンを押した直後でないなら 55 result.setText(result.getText() + c); //押したボタンの名前をつなげる 56 else { 57 result.setText(c); //押したボタンの文字列だけを設定する(いったんクリアしたかに見える) 58 afterCalc = false; 59 } 60 } 61 62 /* 数字を入力するボタンの定義 */ 63 public class NumberButton extends JButton implements ActionListener { 64 private static final long serialVersionUID = 1L; 65 66 public NumberButton(String keyTop) { 67 super(keyTop); //JButtonクラスのコンストラクタを呼び出す 68 this.addActionListener(this); //このボタンにアクションイベントのリスナを設定 69 } 70 71 public void actionPerformed(ActionEvent evt) { 72 String keyNumber = this.getText(); //ボタンの名前を取り出す 73 appendResult(keyNumber); //ボタンの名前をテキストフィールドにつなげる 74 } 75 } 76 77 /* 演算子ボタンを定義 */ 78 public class CalcButton extends JButton implements ActionListener { 79 private static final long serialVersionUID = 1L; 80 81 public CalcButton(String op) { 82 super(op); 83 this.addActionListener(this); 84 } 85 86 public void actionPerformed(ActionEvent e) { 87 if (isStacked) { //以前に演算子ボタンが押されたのなら計算結果を出す 88 double resultValue = (Double.valueOf(result.getText())) 89 .doubleValue(); 90 if (currentOp.equals("+")) //演算子に応じて計算する 91 stackedValue += resultValue; 92 else if (currentOp.equals("-")) 93 stackedValue -= resultValue; 94 else if (currentOp.equals("×")) 95 stackedValue *= resultValue; 96 else if (currentOp.equals("÷")) 97 stackedValue /= resultValue; 98 result.setText(String.valueOf(stackedValue)); //計算結果をテキストフィールドに設定 99 } 100 currentOp = this.getText(); //ボタン名から押されたボタンの演算子を取り出す 101 stackedValue = (Double.valueOf(result.getText())).doubleValue(); 102 afterCalc = true; 103 if (currentOp.equals("=")) 104 isStacked = false; 105 else 106 isStacked = true; 107 } 108 } 109 110 /* クリアボタンの定義 */ 111 public class ClearButton extends JButton implements ActionListener { 112 113 private static final long serialVersionUID = 1L; 114 115 public ClearButton() { 116 super("C"); 117 this.addActionListener(this); 118 } 119 120 public void actionPerformed(ActionEvent evt) { 121 stackedValue = 0.0; 122 afterCalc = false; 123 isStacked = false; 124 result.setText(""); 125 } 126 } 127}
試したこと
// 計算式を表示するテキストフィールド
private JTextField formulaField = new JTextField("計算式部分");
として、
contentPane.add(formulaField, BorderLayout.NORTH);
としましたが、表示できませんでした。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。