자바 gui 계산기 애플 릿 구현
잔말 말고 코드 를 붙 이 고 상세 한 주석 이 있 습 니 다.저도 GUI 를 배 운 지 얼마 되 지 않 았 습 니 다.
이것 은 효과 그림 입 니 다:
코드:
package gui;
/**
*
**/
import java.awt.*; // java gui
import java.awt.event.*; //
import java.util.Stack; // ,
public class Calculator extends Frame implements ActionListener{
/**
* Calculator , Frame , ActionListener
**/
private static final long serialVersionUID = 1L; //
int frame_width = 1000,frame_height = 400; //
Panel panel_textfield,panel_number,panel_op,panel_other; // , , , , panel
Button [] number_buttons; // ( )
Button [] op_buttons; // ( )
TextField textfield; //
public Calculator() {
super(" "); // , ( )
init(); //
setLayout(); //
setBackground(); //
setBounds(); //
setFonts(); //
addButtons(); //
textfield.setEditable(false); // , */
addWindowListener // , , ide
(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
);
setVisible(true); // , ... , ,
, ....
}
public void init() {
panel_textfield = new Panel(); // panel
panel_number = new Panel(); // panel
panel_op = new Panel(); // panel
panel_other = new Panel(); // panel
textfield = new TextField(frame_width);//
setResizable(false); //
add(panel_textfield); //
add(panel_other); //
panel_textfield.add(textfield); //
panel_other.add(panel_number); //
panel_other.add(panel_op); //
}
public void setLayout() {
setLayout(new GridLayout(2,1,4,4)); // ,2*1 , 4
panel_textfield.setLayout(null); // , null
panel_other.setLayout(new GridLayout(1,2,4,4)); // , 1*2 , 4
panel_number.setLayout(new GridLayout(5,3,4,4)); // 5*3
panel_op.setLayout(new GridLayout(3,1,4,4)); // 3*1
}
public void setBackground() { // , ....
panel_textfield.setBackground(Color.red);
panel_number.setBackground(Color.green);
panel_op.setBackground(Color.blue);
}
public void setBounds() { // , ....
setBounds(0, 0, frame_width, frame_height);
textfield.setBounds(0, 0, frame_width, frame_height / 2);
}
public void addButtons() {
String [] titles1 = {"/", "*", "-", // label
"7", "8", "9",
"4", "5", "6",
"1", "2", "3",
"0", ".", "c"};
String [] titles2 = {"x", "+", "="}; // label
number_buttons = new Button[15]; // 15
op_buttons = new Button[3]; // 3
for(int i = 0; i < this.number_buttons.length; i++) {
number_buttons[i] = new Button(titles1[i]);
panel_number.add(number_buttons[i]); //
number_buttons[i].addActionListener(this); // , this, actionPerformed() ,
}
for(int i = 0; i < this.op_buttons.length; i++) {
op_buttons[i] = new Button(titles2[i]); //
panel_op.add(this.op_buttons[i]);
op_buttons[i].addActionListener(this); // , this, actionPerformed() ,
}
}
@Override // ActionListener
public void actionPerformed(ActionEvent e) {
Button button = (Button) e.getSource(); //
/**
* ,
**/
for(int i = 0; i < 14; i++) {
if(button == number_buttons[i] || button == op_buttons[1]) {
textfield.setText(textfield.getText() + button.getLabel());
return;
}
}
/**
* c,
**/
if(button == number_buttons[14]) {
textfield.setText("");
return;
}
/**
* ,
**/
if(button == op_buttons[0]) {
String s = textfield.getText();
if(s.length() > 0)
textfield.setText(s.substring(0, s.length() - 1));
return;
}
/**
* =,
**/
if(button == op_buttons[2]) {
textfield.setText(getResult());
return;
}
}
public String getResult() {
/**
*
**/
String s = textfield.getText(); //
String num = "";
Stack<Double> nums = new Stack<Double>();
Stack<String> ops = new Stack<String>();
/**
* regex ,
**/
for(int i = 0; i < s.length(); i++) {
String temp = s.charAt(i) + "";
if(temp.matches("[0-9]") || temp.matches("[.]")) {
num += temp;
}
else if(temp.matches("[*+]") || temp.matches("[-]") | temp.matches("[/]")) {
if(!num.equals(""))
nums.push(Double.parseDouble(num));
if(ops.isEmpty() || cmpLevel(temp,ops.peek())) {
ops.push(temp);
}
else {
Double num1 = nums.pop();
Double num2 = nums.pop();
String op2 = ops.pop();
nums.push(compute(num2,num1,op2));
i--;
}
num = "";
}
}
while(!ops.isEmpty()) {
if(!num.equals("")) {
nums.push(compute(nums.pop(),Double.parseDouble(num),ops.pop()));
num = "";
}
else {
Double num1 = nums.pop();
Double num2 = nums.pop();
nums.push(compute(num2,num1,ops.pop()));
}
}
return nums.pop().toString();
}
/**
* ,
** /
public Double compute(double num1,double num2,String op) {
if(op.equals("+")) {
return num1 + num2;
}
else if(op.equals("-")) {
return num1 - num2;
}
else if(op.equals("*")) {
return num1 * num2;
}
else
return num1 / num2;
}
/**
*
**/
public boolean cmpLevel(String s1,String s2) {
if(s1.equals("+") || s1.equals("-")) {
return false;
}
else {
if(s2.equals("+") || s2.equals("-"))
return true;
return false;
}
}
/**
*
**/
public void setFonts() {
panel_number.setFont(new Font(" ",Font.PLAIN,24));
panel_op.setFont(new Font(" ",Font.PLAIN,24));
panel_other.setFont(new Font(" ",Font.PLAIN,24));
textfield.setFont(new Font(" ",Font.PLAIN,48));
}
/**
* main
**/
public static void main(String [] args) {
new Calculator();
}
}
계산기 에 관 한 멋 진 글 은 보 세 요《계산기 특집》.더 많은 멋 진 것 을 발견 하 기 를 기다 리 겠 습 니 다!이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.