JFrame 란 java swing 클래스의 일부이며 구현되는 하나의 창이다.
스윙은 자바에서 그래픽 사용자 인터페이스를 구현하기 위하여 제공되는 클래스 이다.
또한 버튼, 창, 표, 트리 등의 컴포넌트들을 이용할 수 있게 해주는 클래스이다.
계산기를 GUI형태로 구현하기위해 JFrame를 사용한다. 이를 사용하기 위해서는 클래스뒤에 JFrame를 상속시켜줘야한다.
클래스 선언뒤 {전에 extends JFrame를 입력하면 import를 해줘야하는데 JFrame위에 커서를 올리고 ctrl + shift + O를 입력하면 자동으로 맨위에 선언된다.
import문은 코드의 길어짐을 방지할 수 있도록 클래스 명을 생략할 수 있다. 아직 잘 모르니까 그냥 이대로 따라해보도록 한다.
setLayout는 GUI에서 버튼을 어떻게 정렬할지 만드는것 기본으로 FlowLayout , GridLayout 과 직접 크기와 위치를 지정하는 null이 있다.
import.java...
Color / 색상변경시 선언
Font / 폰트변경시 선언
GridLayout / GridLayout 사용시선언 (행개수,열개수,좌우간격,상하간격)
import.javax.swing 버튼이나 텍스트필드, 프레임, 패널과같은 GUI지원을 위해 선언
JButton / 클릭시 이벤트가 발생하면 버튼을 GUI로 보여주기 위한 선언
JTextField / 값을 받을 수 있는 Text 패널을 만들기위한 선언
음.. imprt문은 안에 안들어가네요.
import java.awt.Color; //JFrame 뺴고 자동입력 됌
import java.awt.Font;
import java.awt.GridLayout; // Grid문을 사용하기위해 선언
import javax.swing.JButton;
import javax.swing.JFrame; // import문을 선언 JFrame에 커서올리고 Ctrl + Shift + O 입력시 자동입력
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Calculator extends JFrame { // JFrame를 사용하기위해 상속시킴
private JTextField inputSpace;
public Calculator() {
// 프레임창 지정
setLayout(null); // GUI 형식을 지정할 수 있다.
inputSpace = new JTextField(); // inputSpace에는 GUI로 텍스트를 입력받는 JTextField로 구현
inputSpace.setEditable(false); // 수정이 불가능하도록 만듬
inputSpace.setBackground(Color.white); // 배경색을 지정
inputSpace.setHorizontalAlignment(JTextField.RIGHT); // 오른쪽으로 정렬한다.
inputSpace.setFont(new Font("Arial", Font.BOLD, 50)); // 폰트 Arial로 지정
inputSpace.setBounds(8,10,270,70); // x : 8 y : 10 의 위치에 270x70의 크기로 설정
//버튼패널 지정
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new GridLayout(4,4,10,10)); // 칸수, 세로 칸수, 좌우간격, 상하간격을 입력 4행 4열로 총 16칸을 만들었다.
buttonPanel.setBounds(8, 90, 270, 235); //가로위치,세로위치,가로길이,세로길이
String button_names[] = {"C","÷","×","=","7","8","9","+","4","5","6","-","1","2","3","0"}; // 16칸에 각 값 입력
JButton buttons[] = new JButton[button_names.length]; // 값초기화를 위한 버튼 배열선언
for (int i=0; i<button_names.length; i++) { // 선언해놓은 배열 값은 총 16글자
buttons[i] = new JButton(button_names[i]); // 우선 값을 삽입해준다.
buttons[i].setFont(new Font("Arial",Font.BOLD, 20)); // 값이 어떻든 폰트는 동일하게 만든다.
if(button_names[i] =="C" )buttons[i].setBackground(Color.red); // C문자일시 백그라운드 색상을 "RED"로 변경
else if ((i >= 4 && i <= 6) || (i >= 8 && i<= 10) || (i >= 12 && i <= 15)) buttons[i].setBackground(Color.black);
// 숫자는 모두 black로 지정 i는 순번대로 입력된 숫자를 직접 입력했다.
else buttons[i].setBackground(Color.GRAY); // 나머지는 "GRAY"로 지정 ※if문 종료
buttons[i].setForeground(Color.white); // 폰트는 "White"로 지정
buttons[i].setBorderPainted(false); // 테두리 없애기 이거 무슨차이지?
buttonPanel.add(buttons[i]); // 배열에 삽입해놓은 값을 buttonPanel로 옮겨 삽입한다.
}
add(inputSpace); // 기본 프레임창을 호출
add(buttonPanel); // 위에서 만든 버튼들에 값을넣어 불러온다.
setTitle("계산기"); // 창의 제목
setVisible(true); // 창을 화면에 나타내도록 설정(GUI)
setSize(300, 370); // 창의 사이즈 설정
setLocationRelativeTo(null); // 창을 한가운데로 나오게 한다.
setResizable(false); // 창의 사이즈 설정이 불가능 하도록 만든다.
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 창을 닫을때 실행중인 프로그램도 함께 종료시킨다.
}

계산기 title과 기본사이즈, 버튼으로 값을 입력받아 처리할 하얀색 공간은
inputSpace에 JTextField 및 나머지 셋팅값을 합쳐서 만들어졌고,
나머지 버튼들은 buttonPancel에 값을 넣을 수 있는 레이아웃 공간을 4행4열로 16칸 생성 후 배열인 buttons를 선언하여 값들을 넣으며 폰트색과 배경색을 조정해서 만들어둔 buttonPanel에 집어넣어 완성한 후 불러와서 완성되었다.
열심히 알아보고 이해하고있지만 틀릴수도 있어요.. 틀리면 꼭 지적 부탁드립니다.
'혼자해보는 공부' 카테고리의 다른 글
| java계산기 사칙연산까지 해본 후 .. (0) | 2022.04.03 |
|---|---|
| Java 계산기 만들면서 풀이하기(2) (0) | 2022.03.29 |
| [19. static메서드와 인스턴스메서드, 오버로딩, 생성자] (0) | 2022.03.23 |
| [18. 메서드, return, 매개변수] (0) | 2022.03.23 |
| [17. 객체 배열 및 클래스정의, 변수의 종류] (0) | 2022.03.20 |