簡易関数電卓JsCalcをGUI化してみた。JsCalcW - Java

 簡易関数電卓JsCalcGUI化してみました。(^_^;
 SwingでGUI化して、ArrayListで入力にヒストリー機能を付けてみました。(^_^;
 ちなみに、コンパイルするときは、JsCalc.javaを同じディレクトリに置く必要があります。

● JsCalcW.java

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

import java.util.*;

public class JsCalcW {                          // JsCalcW.java [java]
    // main関数
    public static void main(final String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                AppFrame();
            }
        });
    }

    private static void AppFrame() {
        JsCalc.defUserFunc();                   // ユーザー定義関数の設定
        // フレームの作成
        JFrame frame = new JFrame("JsCalcW");   // JFrameオブジェクトを生成
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                                                // ウィンドウを閉じるとプログラムが終了
        MyPanel h = new MyPanel();
        frame.add(h, BorderLayout.CENTER);      // フレームにオブジェクトを置く
        //frame.setSize(new Dimension(360,90)); // 窓サイズ横,縦
        frame.pack();                           // フレームを必要最小の大きさにする
        frame.setVisible(true);                 // フレームを表示する
    }
}

class MyPanel extends JPanel implements ActionListener, KeyListener { // JPanelを継承
    JButton btn1,btn2;
    JTextField txt1,txt2;
    ArrayList<String> sHis = new ArrayList<String>();
    int iCnt = 0;
    
    public MyPanel() {
        setBackground(SystemColor.control); // 背景を灰色にする

        txt1 = new JTextField(25);             // txtの設定
        txt1.addActionListener(this);
        txt1.addKeyListener(this);
        txt1.setFont(new Font("SansSerif",Font.PLAIN,16));

        btn1 = new JButton("=");
        btn1.addActionListener(this);

        txt2 = new JTextField(25);             // txtの設定
        txt2.setFont(new Font("SansSerif",Font.ITALIC,16));

        btn2 = new JButton("C");
        btn2.addActionListener(this);

        JPanel pa = new JPanel();
        pa.setLayout(new GridLayout(2,1,2,2));
        pa.add(txt1);
        pa.add(txt2);
        
        JPanel pb = new JPanel();
        pb.setLayout(new GridLayout(2,1,2,2));
        pb.add(btn1);
        pb.add(btn2);
        
        setLayout(new BorderLayout(2,2));
        add(pa, BorderLayout.CENTER);
        add(pb, BorderLayout.EAST);
        
        sHis.add(""); iCnt = sHis.size()-1;
    }

    public void actionPerformed(ActionEvent e) { // ボタンクリック
        if(e.getSource()==btn1||e.getSource()==txt1) {
            String s = txt1.getText(); sHis.add(s); iCnt = sHis.size()-1;
            txt2.setText(" "+JsCalc.sEval(s)); txt1.requestFocus();
        }
        else if(e.getSource()==btn2) {
            txt1.setText(""); txt2.setText(""); txt1.requestFocus();
        }
    }

    public void keyPressed(KeyEvent e){ 
        int k = e.getKeyCode();
        
        if(k == KeyEvent.VK_DOWN) {
            iCnt++;
            if(iCnt> sHis.size()) iCnt = sHis.size();
            txt2.setText(""); txt1.setText(sHis.get(iCnt % sHis.size()));
        }
        else if(k == KeyEvent.VK_UP  ) {
            iCnt--;
            if(iCnt< 1) iCnt = 1;
            txt2.setText(""); txt1.setText(sHis.get(iCnt % sHis.size()));
        }
   }
   
   public void keyReleased(KeyEvent e){ } 
   public void keyTyped(KeyEvent e){ }

}

●実行結果

●使用法
①数式を入力して、[=]ボタンまたは、[Enter]キーで計算実行。
②[C]ボタンまたは、[↓]矢印キーで画面消去。
③[↑]矢印キーと[↓]矢印キーで入力履歴を表示。

※参考URL
実行可能JARの作り方と実行の仕方 | システム開発ブログ ...
簡易関数電卓JsCalc - Java
簡易関数電卓JsCalcをGUI化してみた。JsCalcW - Java (2)
簡易関数電卓JsCalcをGUI化してみた。JsCalcW - Java (3)
簡易関数電卓JsCalcWを改良してみた。
簡易関数電卓JsCalcWを改良してみた。(2)

すべての人のためのJavaプログラミング 第2版

すべての人のためのJavaプログラミング 第2版

プログラムを作ろう!  JAVA入門

プログラムを作ろう! JAVA入門