계산기 만들기를 이어서 해보겠다.
이전 포스팅에서 GUI형태의 계산기 모양을 만들었으니
이벤트처리해서 만든 계산기를 작동시켜 보겠다.
00_1. ActionListener를 확장시켜 사용한다.
00_2. Debug버튼을 눌렀을 때 작동 시킬 것이므로 다음과같이 버튼에 연결시켜준다.
00_3. 마우스오른쪽버튼'-> 'Source'-> 'Override and Implement Methods' 로 actionPerformed메소드를 오버라이드 시킨다.
01_1. 안에다 코딩을 해서 먼저 버튼을 눌렀을때 텍스트를 바꿔주도록 해보자.
01_2. 바꿔지는 것을 확인할 수 있다.
02_1. 버튼을 누를때마다 바뀌도록 해보자. 객체를 비교할때는 'void equals();' 임을 기억하자.
02_2. 계속 바뀌는 것을 확인할 수 있다.
03_1. 응용해서 버튼을 누르면 1로 바뀌게 해보자. 실제로는 button1에 연결시켜서 사용하자.
03_2. 1이 입력됨을 확인할 수 있다.
03_3. 계속 누르면 1이 계속 쓰여짐을 확인할 수 있다.
※. 코드
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
class MyFrame extends JFrame implements ActionListener { // components는 전부 밖에서 선언해줘야 안에서 사용할 수 있으므로 좋음.
JPanel displayPanel;
JPanel buttonPanel;
JPanel debugPanel;
JTextField display;
JButton[] buttons; // 0 ~ 9 까지 10개의 버튼을 배열로 써서 만들거임.
JButton btnPlus;
JButton btnMinus;
JButton btnProduct; // Multiply
JButton btnDivide;
JButton btnEqual;
JButton btnCE;
JButton btnDebug;
JLabel debugMsg;
public MyFrame()
{
this.setSize(300,400);
this.setTitle("GUI Test");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout( new BorderLayout() );
// 3개의 panel 객체를 만들고 각자 layout 을 설정해보겠다.
displayPanel = new JPanel();
buttonPanel = new JPanel();
debugPanel = new JPanel();
displayPanel.setLayout( new FlowLayout() );
buttonPanel.setLayout( new GridLayout(0, 4, 5, 5) );
debugPanel.setLayout(new FlowLayout());
/* display 관련 */
// display 에 있는 panel에 component를 만들어서 붙이겠다.
display = new JTextField(11); // 글자수가 '11자'가 들어가게 하겠다.
display.setText("0"); // 초기 계산기 화면을 0으로 써놓겠다.
display.setHorizontalAlignment(JTextField.RIGHT); // field 내 글씨를 오른쪽정렬.
Font font = new Font("Serif", Font.BOLD, 30); // ※ Serif ; 삐침이 나와있는 글씨체. san serif ; non 삐침.
display.setFont(font);
// displayPanel 에다가 display component를 붙인다.
displayPanel.add(display);
/* 버튼 관련 */
Font fontBtn = new Font("Serif", Font.BOLD, 30); // 버튼에도 폰트를 주고싶어서 객체생성.
// buttonPanel 에 component 만들고 붙이기.
buttons = new JButton[10]; // array 메모리만 만들어진것이다.
// 실제 버튼 객체 생성하기.
for (int i = 0 ; i < buttons.length ; i++)
{
//buttons[i] = new JButton(""+i); // i 를 String 값으로 받고싶다.
buttons[i] = new JButton(Integer.toString(i)); // i 를 String 값으로 받고싶다.
buttons[i].setFont(fontBtn); // 버튼의 폰트에 대한 지정
}
btnPlus = new JButton("+");
btnMinus = new JButton("-");
btnProduct = new JButton("*");
btnDivide = new JButton("/");
btnEqual = new JButton("=");
btnCE = new JButton("CE");
// 1 2 3 +
// 4 5 6 -
// 7 8 9 *
// 0 / = CE 의 형태로 만들고 싶다.
buttonPanel.add(buttons[1]);
buttonPanel.add(buttons[2]);
buttonPanel.add(buttons[3]);
buttonPanel.add(btnPlus);
buttonPanel.add(buttons[4]);
buttonPanel.add(buttons[5]);
buttonPanel.add(buttons[6]);
buttonPanel.add(btnMinus);
buttonPanel.add(buttons[7]);
buttonPanel.add(buttons[8]);
buttonPanel.add(buttons[9]);
buttonPanel.add(btnProduct);
buttonPanel.add(buttons[0]);
buttonPanel.add(btnDivide);
buttonPanel.add(btnEqual);
buttonPanel.add(btnCE);
//debugPanel 에 debugMsg 와 btnDebug 를 만들어서 붙이겠다.
debugMsg = new JLabel("Start Debug");
debugMsg.setToolTipText("Hello World"); // 마우스를 debugMsg 위에 올려놓으면 Text 가 말풍선 형태로 출력.
btnDebug = new JButton("Debug Button");
btnDebug.addActionListener(this); // 리스너를 이벤트소스에 등록한다. (항상 이 형식으로 사용하면 된다.)
debugPanel.add(debugMsg);
debugPanel.add(btnDebug);
//btnDebug.setEnabled(false);
// frame에다가 panel들 붙이기.
this.add(displayPanel, BorderLayout.NORTH);
this.add(buttonPanel, BorderLayout.CENTER);
this.add(debugPanel, BorderLayout.SOUTH);
//debugPanel.setVisible(false);
String msg = debugMsg.getText();
System.out.println(msg);
//this.pack();
this.setVisible(true);
}// MyFrame Method
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == btnDebug)
{
//System.out.println("btnDebug is Clicked.!");
//debugMsg.setText("Hello World.");
if(debugMsg.getText().equals("Start Debug")) // 객체들의 비교는 == 가 아니라 .equal 객체(String)와 객체를 비교할때.
{
debugMsg.setText("Hello World.");
}else{
debugMsg.setText("Start Debug");
}
}
//1번 버튼이라고 가정하고 0을 1로 바꿔보자.(display 값이 0이기 때문에)
// 현재 display 값이 '0'이면
// display.setText("1")
// else
// 현재 디스플레이값 display.getText() + "1"
if (display.getText().equals("0"))
{
display.setText("1");
}else
{
display.setText( display.getText() + "1");
}
}
}// MyFrame Class
public class Test {
public static void main(String[] args) {
MyFrame frame = new MyFrame();
}// main
}// Main Class