GUI calculator

meera0418
calculator.docx

import java.awt.Component;

import java.awt.FlowLayout;

import java.awt.GridLayout;

import java.io.File;

import java.io.FileNotFoundException;

import java.util.ArrayList;

import java.util.Scanner;

import java.util.*;

import java.lang.*;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

public class Calculator {

private static Scanner scnr;

private static File inp_file;

private static String getLabel(String file_lines) {

int cntr;

file_lines.trim();

for (cntr = 0; cntr < file_lines.length(); cntr++) {

char tmp = file_lines.charAt(cntr);

boolean b2 = Character.isLetter(tmp);

if (!b2) {

break;

}

}

return file_lines.substring(0, cntr);

}

public static void main(String[] args) {

String strng, lbl;

try {

inp_file = new File("Input.txt");

scnr = new Scanner(inp_file);

if (scnr.hasNextLine()) {

strng = scnr.nextLine().trim();

lbl = getLabel(strng);

if (!lbl.equalsIgnoreCase("Window")) {

System.out.println("First label should be WINDOW");

return;

}

strng = strng.substring(lbl.length()).trim();

JFrame frame = (JFrame) addCompntRec(strng, lbl);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

} else {

System.out.println("Unknown Error");

}

} catch (FileNotFoundException exp) {

System.out.println("File not found");

exp.printStackTrace();

} catch (Exception excep) {

System.out.println("Unknown Error");

excep.printStackTrace();

}

}

private static ArrayList<Integer> getIntAray(String strng)

throws Exception {

int lp, lpj;

ArrayList<Integer> result = new ArrayList<Integer>();

for (lp = 0; lp < strng.length(); lp++) {

for (lpj = lp; lpj < strng.length() && Character.isDigit(strng.charAt(lpj)); lpj++)

;

if (lp != lpj) {

result.add(Integer.parseInt(strng.substring(lp, lpj)));

}

lp = lpj;

}

return result;

}

private static Component addCompntRec(String strng, String lbl)

throws Exception {

String tempr;

if (lbl.equalsIgnoreCase("Window")) {

strng = strng.trim();

JFrame frame;

if (strng.charAt(0) == '"') {

strng = strng.substring(1);

tempr = strng.substring(0, strng.indexOf('\"'));

frame = new JFrame(tempr);

strng = strng.substring(strng.indexOf('"') + 1).trim();

} else {

frame = new JFrame("Default title");

}

if (strng.charAt(0) == '(') {

tempr = strng.substring(0, strng.indexOf(')') + 1);

strng = strng.substring(tempr.length()).trim();

ArrayList<Integer> instr = getIntAray(tempr);

if (instr.size() == 2) {

frame.setSize(instr.get(0), instr.get(1));

}

}

tempr = getLabel(strng);

strng = strng.substring(tempr.length()).trim();

JPanel lpnl = new JPanel();

if (tempr.equalsIgnoreCase("Layout")) {

tempr = getLabel(strng);

strng = strng.substring(tempr.length()).trim();

if (tempr.equalsIgnoreCase("flow")) {

FlowLayout flw = new FlowLayout();

lpnl.setLayout(flw);

}

if (tempr.equalsIgnoreCase("grid")) {

if (strng.charAt(0) == '(') {

tempr = strng.substring(0, strng.indexOf(')') + 1);

strng = strng.substring(tempr.length()).trim();

ArrayList<Integer> instr = getIntAray(tempr);

GridLayout tmpLayout;

if (instr.size() == 2) {

tmpLayout = new GridLayout(instr.get(0),

instr.get(1));

lpnl.setLayout(tmpLayout);

} else if (instr.size() == 4) {

tmpLayout = new GridLayout(instr.get(0),

instr.get(1), instr.get(2), instr.get(3));

lpnl.setLayout(tmpLayout);

}

}

}

}

while (true) {

if (scnr.hasNextLine()) {

strng = scnr.nextLine().trim();

tempr = getLabel(strng);

if (tempr.equalsIgnoreCase("end")) {

break;

} else {

Component tmpCompnt = addCompntRec(

strng.substring(tempr.length()), tempr);

if (tmpCompnt != null) {

if (tmpCompnt.getClass() == frame.getClass()) {

System.out.println("Window cant be nested inside");

} else

{

lpnl.add(tmpCompnt);

}

}

}

} else

{

System.out.println("Error in nesting");

break;

}

}

frame.add(lpnl);

return frame;

}

if (lbl.equalsIgnoreCase("panel")) {

strng = strng.trim();

JPanel pnel = new JPanel();

tempr = getLabel(strng);

strng = strng.substring(tempr.length()).trim();

if (tempr.equalsIgnoreCase("Layout")) {

tempr = getLabel(strng);

strng = strng.substring(tempr.length()).trim();

if (tempr.equalsIgnoreCase("flow")) {

FlowLayout flw = new FlowLayout();

pnel.setLayout(flw);

}

if (tempr.equalsIgnoreCase("grid")) {

if (strng.charAt(0) == '(') {

tempr = strng.substring(0, strng.indexOf(')') + 1);

strng = strng.substring(tempr.length()).trim();

ArrayList<Integer> instr = getIntAray(tempr);

GridLayout tmpLayout;

if (instr.size() == 2) {

tmpLayout = new GridLayout(instr.get(0),

instr.get(1));

pnel.setLayout(tmpLayout);

} else if (instr.size() == 4) {

tmpLayout = new GridLayout(instr.get(0),

instr.get(1), instr.get(2), instr.get(3));

pnel.setLayout(tmpLayout);

}

}

}

}

while (true) {

if (scnr.hasNextLine()) {

strng = scnr.nextLine().trim();

tempr = getLabel(strng);

if (tempr.equalsIgnoreCase("end")) {

break;

} else {

Component tmpCompnt = addCompntRec(

strng.substring(tempr.length()), tempr);

if (tmpCompnt != null) {

if (tmpCompnt.getClass() == new JFrame()

.getClass()) {

System.out

.println("Window cant be nested inside");

} else {

pnel.add(tmpCompnt);

}

}

}

} else {

System.out.println("Error in nesting");

break;

}

}

return pnel;

}

if (lbl.equalsIgnoreCase("button")) {

strng = strng.trim();

JButton button;

if (strng.charAt(0) == '"') {

strng = strng.substring(1);

tempr = strng.substring(0, strng.indexOf('\"'));

button = new JButton(tempr);

strng = strng.substring(strng.indexOf('"') + 1).trim();

} else {

button = new JButton("Default title");

}

return button;

}

if (lbl.equalsIgnoreCase("lbl")) {

strng = strng.trim();

JLabel Label;

if (strng.charAt(0) == '"') {

strng = strng.substring(1);

tempr = strng.substring(0, strng.indexOf('\"'));

Label = new JLabel(tempr);

strng = strng.substring(strng.indexOf('"') + 1).trim();

} else {

Label = new JLabel("Default title");

}

return Label;

}

if (lbl.equalsIgnoreCase("textfield")) {

strng = strng.trim();

ArrayList<Integer> li = getIntAray(strng);

JTextField field = new JTextField(li.get(0));

return field;

}

return null;

}

}