質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

1113閲覧

電卓 数字表示部分と計算式を表示する部分に分けたい

tapipi

総合スコア13

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/07/15 06:06

前提・実現したいこと

電卓の表示部分を
「計算表示」
「数字表示」
と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);
としましたが、表示できませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ボタン群と同じようにパネルでくるんでください。

Java

1JPanel panel = new JPanel(); 2panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); 3panel.add(formulaField); 4panel.add(result); 5contentPane.add(panel, BorderLayout.NORTH);

投稿2020/07/15 11:28

TN8001

総合スコア9396

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

BorderLayoutの各エリア(North等)には一つのコンポーネントしかいれることができません。
Northに2つのコンポーネントを入れるのであれば、KeyPanelと同様に他のコンポーネントを挟んでその中に入れる必要があります。

投稿2020/07/15 11:27

Kaleidoscope

総合スコア257

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問