이 계산기의 인터페이스는 대화형 인터페이스와 다양한 입력에 대한 응답을 포함하여 Windows와 함께 제공되는 간단한 계산기를 모방합니다. 메뉴 바와 메모리 버튼의 기능은 아직 구현되지 않았습니다.
다음과 같이 코드 코드를 복사합니다.
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.plaf.basic.BasicBorders;
공개 클래스 계산기는 JFrame을 확장합니다.
개인 정적 최종 긴 serialVersionUID = 1L;
컨테이너 c = getContentPane();
StringBuilder number1 = new StringBuilder("");//첫 번째 숫자 문자열 저장
StringBuilder number2 = new StringBuilder("");//두 번째 숫자 문자열 저장
StringBuilder 연산자 = new StringBuilder("");//저장소 연산자
StringBuilder result = new StringBuilder("");//스토리지 작업 결과
JTextField numbershow = new JTextField("0.");//번호 표시 영역, 초기 표시는 "0"입니다.
public static void main(String[] args) {//메인 메소드
계산기 c1 = 새로운 계산기();
c1.setVisible(true);
}
public Calculator() {// 계산기 구성 방법
setTitle("계산기");
setBounds(100, 100, 260, 245);
크기 조정 가능(false);
setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
createMenuBar();//메뉴바 생성
createNumberShow();//숫자 표시 영역 생성
createMemoShow();//메모리 디스플레이 생성
createClearButtons();//백스페이스, CE, C 등 세 개의 버튼을 생성합니다.
createButtonArea();//숫자버튼 영역 생성
}
private void createMenuBar() {//메뉴 표시줄을 만드는 방법
JMenuBar 메뉴바 = new JMenuBar();
setJMenuBar(메뉴바);
JMenu menu1 = new JMenu("편집");
JMenu menu2 = new JMenu("보기");
JMenu menu3 = new JMenu("도움말");
menubar.add(menu1);
menubar.add(menu2);
menubar.add(menu3);
JMenuItem menu1item1 = new JMenuItem("복사");
JMenuItem menu1item2 = new JMenuItem("붙여넣기");
JMenuItem menu2item1 = new JMenuItem("표준 유형");
JMenuItem menu2item2 = new JMenuItem("과학");
JMenuItem menu2item3 = new JMenuItem("과학적 그룹화");
JMenuItem menu3item1 = new JMenuItem("도움말 항목");
JMenuItem menu3item2 = new JMenuItem("계산기 정보");
menu1.add(menu1item1);
menu1.add(menu1item2);
menu2.add(menu2item1);
menu2.add(menu2item2);
menu2.add(menu2item3);
menu3.add(menu3item1);
menu3.add(menu3item2);
}
private void createNumberShow() {//숫자 표시 영역을 만드는 방법
numbershow.setHorizontalAlignment(JTextField.RIGHT);
numbershow.setBounds(5, 0, 245, 22);
numbershow.setEnabled(false);
numbershow.setDisabledTextColor(Color.BLACK);
c.add(번호표시);
}
private void createMemoShow() {//메모리 디스플레이를 생성하는 방법
JTextField memoshow = new JTextField();
memoshow.setEditable(false);
memoshow.setBounds(10, 30, 28, 22);
memoshow.setBorder(새 BasicBorders.FieldBorder(Color.black,
색상.검정색, 색상.흰색, 색상.흰색));
c.add(메모쇼);
}
private void createClearButtons() {// Backspace, CE, C 버튼 3개를 생성하는 메소드
JButton[] 클리어버튼 = new JButton[3];
String[]clearbuttontext = { "백스페이스", "CE", "C" };
for (int i = 0; i < 3; i++) {
클리어버튼[i] = new JButton();
Clearbutton[i].setText(clearbuttontext[i]);
clearbutton[i].setHorizontalAlignment(SwingConstants.CENTER);
clearbutton[i].setMargin(new Insets(0, 0, 0, 0));
clearbutton[i].setFont(new java.awt.Font("Arial", 0, 9));
ClearButton[i].setForeground(Color.blue);
클리어버튼[i].setBounds(48 + i * 68, 30, 63, 22);
ClearButton[i].setForeground(Color.red);
c.add(clearbutton[i]);
}
clearbutton[0].addActionListener(new ActionListener() {//백스페이스 버튼에 대한 리스너 추가
@보수
공공 무효 actionPerformed(ActionEvent e) {
if (number1.toString().equals("")) {// 입력이 없는 경우
showNumber(numbershow, number1);//번호1 표시
} else if (operator.toString().equals("")) {// 숫자1만 입력한 경우
number1.deleteCharAt(number1.toString().length() - 1); // number1의 마지막 문자를 제거합니다.
showNumber(numbershow, number1);//번호1 표시
} else if (number2.toString().equals("")) {// 숫자1과 연산자만 입력한 경우
showNumber(numbershow, number1);//처리 없음, 번호1 표시
} else {// 숫자1, 연산자, 숫자2가 입력된 경우
number2.deleteCharAt(number2.toString().length() - 1) // number2의 마지막 문자를 제거합니다.
showNumber(numbershow, number2);//번호2 표시
}
}
});
clearbutton[1].addActionListener(new ActionListener() {//CE 버튼에 대한 리스너 추가
@보수
공공 무효 actionPerformed(ActionEvent e) {
if (number1.toString().equals("")) {// 입력이 없는 경우
showNumber(numbershow, number1);//번호1 표시
} else if (operator.toString().equals("")) {// 숫자1만 입력한 경우
number1.setLength(0);//1번 지우기
showNumber(numbershow, number1);//번호1 표시
} else if (number2.toString().equals("")) {// number1과 연산자가 입력된 경우
showNumber(numbershow, number2);//처리 없음, 표시 번호2
} else {// 숫자1, 연산자, 숫자2가 입력된 경우
number2.setLength(0);//2번 지우기
showNumber(numbershow, number2);//번호2 표시
}
}
});
clearbutton[2].addActionListener(new ActionListener() {//C 버튼에 대한 리스너 추가
@보수
public void actionPerformed(ActionEvent e) {// 모든 저장소 지우기
number1.setLength(0);
number2.setLength(0);
연산자.setLength(0);
numbershow.setText("0.");
결과.setLength(0);
}
});
}
private void createButtonArea() {//디지털 버튼 영역을 생성하는 방법
JPanel ButtonArea = new JPanel();
ButtonArea.setBounds(5, 55, 245, 125);
ButtonArea.setLayout(new GridLayout(4, 6, 5, 5));
c.add(ButtonArea);
JButton[] 숫자버튼 = new JButton[24];
String[] numberbuttontext = { "MC", "7", "8", "9", "/", "sqrt", "MR",
"4", "5", "6", "*", "%", "MS", "1", "2", "3", "-", "1/X", "M+",
"0", "+/-", ".", "+", "=" };
for (int i = 0; i < 24; i++) {// 루프를 사용하여 이 24개 버튼에 라벨을 추가합니다.
numberbutton[i] = new JButton(numberbuttontext[i]);
ButtonArea.add(번호버튼[i]);
if (i % 6 == 0 || i % 6 == 4 || i == 23) {// 연산자 버튼이 빨간색으로 설정됨
numberbutton[i].setHorizontalAlignment(SwingConstants.CENTER);
numberbutton[i].setMargin(new Insets(0, 0, 0, 0));
numberbutton[i].setFont(new java.awt.Font("Arial", 0, 9));
numberbutton[i].setForeground(Color.red);
} else {//기타 설정은 파란색입니다.
numberbutton[i].setHorizontalAlignment(SwingConstants.CENTER);
numberbutton[i].setMargin(new Insets(0, 0, 0, 0));
numberbutton[i].setFont(new java.awt.Font("Arial", 0, 9));
numberbutton[i].setForeground(Color.blue);
}
}
int[] 숫자 = { 19, 13, 14, 15, 7, 8, 9, 1, 2, 3 };//이 배열의 숫자는 각각 numberbuttontext 배열의 숫자 0-9의 일련 번호를 나타냅니다.
for (int i = 0; i <= 9; i++) { // 루프를 사용하여 0-9의 10개 숫자 버튼에 대한 리스너를 추가합니다.
최종 문자열 str = String.valueOf(i);
numberbutton[numbers[i]].addActionListener(new ActionListener() {//버튼 0-9에 대한 리스너 추가
@보수
공공 무효 actionPerformed(ActionEvent e) {
if (operator.toString().equals("")) {// 연산자가 입력되기 전
add(number1, str); // number1의 값만 설정
showNumber(numbershow, number1);//number1의 값만 표시
} else {//연산자 입력 후
add(number2, str);//number2의 값만 설정
showNumber(numbershow, number2);//number2의 값만 표시
}
}
});
}
numberbutton[20].addActionListener(new ActionListener() { //"+/-" 버튼에 대한 리스너 추가
@보수
공공 무효 actionPerformed(ActionEvent e) {
if (operator.toString().equals("")) {// 연산자가 입력되기 전
add(number1, "+/-");// number1의 값만 설정
showNumber(numbershow, number1);//number1의 값만 표시
} else {//연산자 입력 후
add(number2, "+/-");// number2의 값만 설정
showNumber(numbershow, number2);//number2의 값만 표시
}
}
});
numberbutton[21].addActionListener(new ActionListener() { //"." 버튼에 대한 리스너 추가
@보수
공공 무효 actionPerformed(ActionEvent e) {
if (operator.toString().equals("")) {// 연산자를 입력하기 전에는 number1의 값만 표시됩니다.
add(번호1, ".");
showNumber(numbershow, number1);
} else {//연산자를 입력하면 숫자2의 값만 표시됩니다.
add(번호2, ".");
showNumber(numbershow, number2);
}
}
});
numberbutton[22].addActionListener(new ActionListener() { //"+" 버튼에 대한 리스너 추가
@보수
공공 무효 actionPerformed(ActionEvent e) {
연산자.setLength(0);
Operator.append("+");
}
});
numberbutton[16].addActionListener(new ActionListener() { //"-" 버튼에 대한 리스너 추가
@보수
공공 무효 actionPerformed(ActionEvent e) {
연산자.setLength(0);
Operator.append("-");
}
});
numberbutton[10].addActionListener(new ActionListener() { //"*" 버튼에 대한 리스너 추가
@보수
공공 무효 actionPerformed(ActionEvent e) {
연산자.setLength(0);
Operator.append("*");
}
});
numberbutton[4].addActionListener(new ActionListener() { //"/" 버튼에 대한 리스너 추가
@보수
공공 무효 actionPerformed(ActionEvent e) {
연산자.setLength(0);
Operator.append("/");
}
});
numberbutton[23].addActionListener(new ActionListener() { //"=" 버튼에 대한 리스너 추가
@보수
공공 무효 actionPerformed(ActionEvent e) {
if (number1.toString().equals("")) {// number1이 비어 있는 경우
showNumber(numbershow, number1);
} else if (operator.toString().equals("")) {// number1이 비어 있지 않고 연산자가 비어 있는 경우
showNumber(numbershow, number1);
} else if (number2.toString().equals("")) {// number1과 연산자는 비어 있지 않지만, number2는 비어 있는 경우
스위치(operator.toString()) {
대소문자("+"): {
number2.append(number1.toString());
더블 d = Double.parseDouble(번호1
.toString())
+ Double.parseDouble(number2.toString());
결과.setLength(0);
결과.추가(d);
showNumber(번호show, result);
number1.setLength(0);
번호1.append(d);
}
부서지다;
사례 ("-"): {
number2.append(number1.toString());
더블 d = Double.parseDouble(번호1
.toString())
- Double.parseDouble(number2.toString());
결과.setLength(0);
결과.추가(d);
showNumber(번호show, result);
number1.setLength(0);
번호1.append(d);
}
부서지다;
사례 ("*"): {
number2.append(number1.toString());
더블 d = Double.parseDouble(번호1
.toString())
* Double.parseDouble(number2.toString());
결과.setLength(0);
결과.추가(d);
showNumber(번호show, result);
number1.setLength(0);
번호1.append(d);
}
부서지다;
사례 ("/"): {
number2.append(number1.toString());
더블 d = Double.parseDouble(번호1
.toString())
/ Double.parseDouble(number2.toString());
결과.setLength(0);
결과.추가(d);
showNumber(번호show, result);
number1.setLength(0);
번호1.append(d);
}
부서지다;
}
} else {// 숫자1, 연산자, 숫자2가 비어 있지 않은 경우
스위치(operator.toString()) {
대소문자("+"): {
더블 d = Double.parseDouble(번호1
.toString())
+ Double.parseDouble(number2.toString());
결과.setLength(0);
결과.추가(d);
showNumber(번호show, result);
number1.setLength(0);
번호1.append(d);
}
부서지다;
사례 ("-"): {
더블 d = Double.parseDouble(번호1
.toString())
- Double.parseDouble(number2.toString());
결과.setLength(0);
결과.추가(d);
showNumber(번호show, result);
number1.setLength(0);
번호1.append(d);
}
부서지다;
사례 ("*"): {
더블 d = Double.parseDouble(번호1
.toString())
* Double.parseDouble(number2.toString());
결과.setLength(0);
결과.추가(d);
showNumber(번호show, result);
number1.setLength(0);
번호1.append(d);
}
부서지다;
사례 ("/"): {
더블 d = Double.parseDouble(번호1
.toString())
/ Double.parseDouble(number2.toString());
결과.setLength(0);
결과.추가(d);
showNumber(번호show, result);
number1.setLength(0);
번호1.append(d);
}
부서지다;
}
}
}
});
numberbutton[17].addActionListener(new ActionListener() { //"1/x" 버튼에 대한 리스너 추가
@보수
공공 무효 actionPerformed(ActionEvent e) {
if (number1.toString().equals("")) {//number1이 입력되지 않은 경우
numbershow.setText("제수는 0이 될 수 없습니다.");
} else if (operator.toString().equals("")) {//number1이 입력되었지만 연산자가 입력되지 않았습니다.
if (Double.parseDouble(number1.toString()) == 0) {// number1의 값이 0인 경우
numbershow.setText("제수는 0이 될 수 없습니다.");
} else {// number1의 값이 0이 아닌 경우
더블 d = 1 / (Double.parseDouble(숫자1
.toString()));
number1.setLength(0);
number1.append(d);//number1의 값을 열고 저장합니다.
showNumber(numbershow, number1);
}
} else if (number2.toString().equals("")) {//number1과 연산자가 입력되었지만 number2는 입력되지 않았습니다.
더블 d = 1 / (Double.parseDouble(숫자1
.toString()));
number2.append(d);//number1의 값을 열고 저장합니다.
showNumber(numbershow, number2);
} else {//숫자1, 연산자, 숫자2 입력
더블 d = 1 / (Double.parseDouble(숫자2
.toString()));
number2.setLength(0);
number2.append(d);//number2의 값을 열고 저장합니다.
showNumber(numbershow, number2);
}
}
});
numberbutton[11].addActionListener(new ActionListener() { //"%" 버튼에 대한 리스너 추가
@보수
공공 무효 actionPerformed(ActionEvent e) {
// 임시 비어 있음
}
});
numberbutton[5].addActionListener(new ActionListener() { //"sqrt" 버튼에 대한 리스너 추가
@보수
공공 무효 actionPerformed(ActionEvent e) {
if (number1.toString().equals("")) {//number1이 입력되지 않은 경우
showNumber(numbershow, number1);
} else if (operator.toString().equals("")) {//number1이 입력되었지만 연산자가 입력되지 않았습니다.
if (Double.parseDouble(number1.toString()) < 0) {// number1이 0보다 작습니다.
numbershow.setText("함수 입력이 잘못되었습니다.");
} else {// 숫자1이 0보다 큽니다.
더블 d = Math.sqrt(Double.parseDouble(숫자1
.toString()));
number1.setLength(0);
number1.append(d);//number1의 값을 열고 저장합니다.
showNumber(numbershow, number1);
}
} else if (number2.toString().equals("")) {//number1과 연산자가 입력되었지만 number2는 입력되지 않았습니다.
더블 d = Math.sqrt(Double.parseDouble(숫자1
.toString()));
number2.append(d);//number1의 값을 열고 저장합니다.
showNumber(numbershow, number2);
} else {//숫자1, 연산자, 숫자2 입력
더블 d = Math.sqrt(Double.parseDouble(숫자2
.toString()));
number2.setLength(0);
number2.append(d);//number2의 값을 열고 저장합니다.
showNumber(numbershow, number2);
}
}
});
}
public void add(StringBuilder s1, String s2) {// 버튼 입력 후 디지털 문자열을 변경하는 방법을 정의합니다.
if (s2.equals("+/-")) {// "+/-" 입력 후 디지털 문자열의 변경을 정의합니다.
if (s1.toString().equals("") || s1.toString().equals("0")) {// 숫자 문자열이 비어 있거나 0이면 변경이 발생하지 않습니다.
s1.append("");
} else {// 숫자 문자열이 비어 있지도 않고 0도 아닌 경우 숫자 문자열 앞에 "-" 문자를 추가하거나 삭제합니다.
if (s1.toString().startsWith("-")) {
s1.deleteCharAt(0);
} 또 다른 {
s1.insert(0, "-");
}
}
}
if (s2.equals(".")) {// "." 입력 후 디지털 문자열의 변경을 정의합니다.
if (s1.toString().indexOf(".") == -1) {// 숫자 문자열에 "." 문자가 포함되어 있는지 확인하고, 그렇지 않은 경우 다음 코드를 실행합니다.
if (s1.toString().equals("")) {// 숫자 문자열이 비어 있으면 숫자 문자열을 "0"으로 설정합니다.
s1.setLength(0);
s1.append("0.");
} 또 다른 {
s1.append(".");
}
} else {// 있는 경우 변경이 발생하지 않습니다.
s1.append("");
}
}
if (s2.equals("0")) {// "0" 입력 후 디지털 문자열의 변화를 정의합니다.
if (s1.toString().equals("0")) {// 숫자 문자열이 "0"이면 변경이 발생하지 않습니다.
s1.append("");
} else {// 숫자 문자열이 "0"인 경우 문자열 뒤에 "0"을 추가합니다.
s1.append("0");
}
}
for (int i = 1; i < 10; i++) {//루프를 통해 1-9를 입력한 후 디지털 문자열의 변경 사항을 정의합니다.
문자열 str = String.valueOf(i);
if (s2.equals(str)) {// 1~9 입력 후 디지털 문자열의 변화를 정의합니다.
if (s1.toString().equals("0")) {
s1.setLength(0);
s1.append(str);
} 또 다른
s1.append(str);
}
}
}
public void showNumber(JTextField j, StringBuilder s) {//숫자 표시 영역에 숫자 문자열을 표시하는 방법을 정의하는 방법
if (s.toString().equals("") == true || s.toString().equals("0") == true) {
j.setText("0.");
} else if (s.toString().indexOf(".") == -1) {
j.setText(s.toString() + ".");
} 또 다른 {
j.setText(s.toString());
}
}
}