[JAVA+국비교육] Event (이벤트)
by 무작정 개발반응형
2022.01.13(18일 차)
벌써 자바 끝이 보인다. 강사님이 다음 주에 팀플을 진행한다고 말씀하셨다.. (매우 걱정)
오늘 배우는 것은 중요하지 않다고 말씀하셨다. 그래서 가벼운 마음으로 수업에 임하였다.
오늘의 수업 내용
AWT (Abstract Window Toolkit)
Window에 관한 모든 내용을 Frame이 가지고 있고, 반드시 생성자를 만들어줘야 한다.
package com.day17;
import java.awt.Color;
import java.awt.Frame;
//이벤트 단위의 프로그램 - 웹은 다 이벤트 단위 프로그램이기 때문
//AWT
public class Test1 extends Frame {
private static final long serialVersionUID = 1L;
public Test1() {
setTitle("자바윈도우");
setSize(200,300);
setBackground(new Color(255,255,49));//RGB
setVisible(true);
}
public static void main(String[] args) {
//생성자만 호출
new Test1();
}
}
ActionListener
package com.day17;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Test4 extends Frame implements ActionListener {
private static final long serialVersionUId = 1L;
private Button btn;
private TextArea ta;
private TextField tf;
public Test4() {
tf = new TextField();
ta = new TextArea();
btn = new Button("추가");
add(tf, BorderLayout.NORTH);
add(ta, BorderLayout.CENTER);
add(btn, BorderLayout.SOUTH);
tf.addActionListener(this);
btn.addActionListener(this);
setTitle("윈도우");
setSize(300, 300);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setVisible(true);
}
public static void main(String[] args) {
new Test4();
}
@Override
public void actionPerformed(ActionEvent evt) {
Object ob = evt.getSource();
if(ob instanceof Button || ob instanceof TextField) {
String str = tf.getText();
if(!str.equals("")) { // 공백이면 추가하지마라
ta.append(str + "\r\n");
tf.setText("");
tf.requestFocus(); // 커서 갖다놔라
}
}
}
}
성적을 입력받아 합계 계산해주는 윈도 만들기
package com.day17;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Test5 extends Frame implements ActionListener{
private static final long serialVersionUID = 1L;
private TextField[] tf = new TextField[4];
private Label result = new Label("",Label.LEFT);
private Button btn1, btn2;
public Test5( ) {
String[] title = {"이름","국어","영어","수학","총점"};
setLayout(null);
for(int i=0;i<5;i++) {
Label lbl = new Label();
lbl.setText(title[i]);
lbl.setBounds(10, (i+1)*30, 50, 20);
add(lbl);
if(i!=4) {
tf[i] = new TextField();
tf[i].setBounds(80,(i+1)*30,70,20);
tf[i].addKeyListener(new KeyHandler());
add(tf[i]);
}else {
result.setBounds(80, (i+1)*30, 70, 20);
add(result);
}
}
//버튼
btn1 = new Button("결과");
btn1.setBounds(180, 30, 60, 20);
add(btn1);
//이벤트
btn1.addActionListener(this);
btn1.addKeyListener(new KeyHandler());
btn2 = new Button("종료");
btn2.setBounds(180, 60, 60 ,20);
add(btn2);
//이벤트
btn2.addActionListener(this);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setTitle("성적처리");
setSize(260,180);
setResizable(false);
setVisible(true);
}
public static void main(String[] args) {
new Test5();
}
@Override
public void actionPerformed(ActionEvent e) {
Object ob = e.getSource();
//ob에 있는게 버튼이냐???
if(ob instanceof Button) {
Button b = (Button)ob;
if(b == btn1) {
//연산
execute();
} else if(b == btn2) {
System.exit(0);
}
}
}
//계산하는 메서드(연산 부분 2개)
private void execute() {
int tot = 0;
try {
for(int i=1; i<=3; i++) {
tot += Integer.parseInt(tf[i].getText());
}
//총점은 int형이니까 문자로 바꿔서 tot에 넣어준다
result.setText(Integer.toString(tot));
//return.setText("" + tot);
} catch (Exception e2) {
result.setText("입력 오류!!");
}
}
class KeyHandler extends KeyAdapter {
@Override
public void keyPressed(KeyEvent e) {
Object ob = e.getSource();
if(e.getKeyCode() != KeyEvent.VK_ENTER) {
return;
}
if(ob instanceof Button) {
Button b = (Button)ob;
if(b == btn1) {
//연산
execute(); // 2번 같은 방법의 연산이 있으니 메서드를 만들어서 필요한 부분에 메서드 불러와서 한다.
return;
}
}
if(ob instanceof TextField) {
TextField t = (TextField)ob;
for(int i=0; i<tf.length; i++) {
if(i!=3 && tf[i]==t) {
tf[i+1].requestFocus();
return;
} else if(tf[3] == t) {
btn1.requestFocus();
return;
}
}
}
}
}
}
마우스 이벤트
package com.day17;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Label;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//마우스 이벤트
public class Test6 extends Frame{
private static final long serialVersionUID = 1L;
private int x,y;
private Label lbl = new Label("", Label.CENTER);
public Test6() {
add(lbl,BorderLayout.SOUTH);
addMouseListener(new MouseHandler());
addMouseMotionListener(new MouseMotionHandler());
setBackground(new Color(150,150,150));
setForeground(new Color(0,0,255));
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setTitle("좌표출력");
setSize(400, 400);
setResizable(true);
setVisible(true);
}
@Override
public void paint(Graphics g) {
String str;
str ="("+ x + "," + y +")";
g.drawString(str, x, y);
}
@Override
public void update(Graphics g) {
paint(g);
}
class MouseHandler extends MouseAdapter{
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
}
class MouseMotionHandler extends MouseMotionAdapter{
@Override
public void mouseDragged(MouseEvent e) {
x = e.getX();
y = e.getY();
repaint();
}
@Override
public void mouseMoved(MouseEvent e) {
String str = String.format("(%d,%d)", e.getX(),e.getY());
lbl.setText(str);
}
}
public static void main(String[] args) {
new Test6();
}
}
이건 내 마우스 좌표를 출력해 준다. 왼쪽을 꾹 누르면서 움직이면 저렇게 좌표가 겹쳐서 출력된다.
Swing
package com.day17;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
//위에 메뉴를 만든다
//스윙이라는건데 앞에 J만 붙히면 된다
public class Test7 extends JFrame implements ActionListener{
private static final long serialVersionUID = 1L;
private JLabel lbl;
public Test7() {
lbl = new JLabel("메세지",JLabel.CENTER);
add(lbl);
//메뉴추가
JMenuBar mbar = new JMenuBar();
JMenu menu;
JMenuItem mi;
menu = new JMenu("메세지대화상자");
mi = new JMenuItem("메세지");
menu.add(mi);
mi.addActionListener(this);
mi = new JMenuItem("입력");
menu.add(mi);
mi.addActionListener(this);
mi = new JMenuItem("종료");
menu.add(mi);
mi.addActionListener(this);
mbar.add(menu);
setJMenuBar(mbar);
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setTitle("대화상자");
setSize(300, 300);
setVisible(true);
}
public static void main(String[] args) {
new Test7();
}
@Override
public void actionPerformed(ActionEvent e) {
String str = e.getActionCommand();
//제목을 클릭했을때 그 제목을 그대로 가져온다
if(str.equals("메세지")) {
JOptionPane.showMessageDialog(this, "내일은 금요일입니다",
"요일 알림",JOptionPane.INFORMATION_MESSAGE);
//this -> 내 앞에다가 띄워라
}else if(str.equals("입력")) {
String age = JOptionPane.showInputDialog(this,
"나이가 몇살입니까?","입력",
JOptionPane.QUESTION_MESSAGE);
lbl.setText("당신의 나이는 " + age + "살 이군요");
}else if(str.equals("종료")) {
int result;
result = JOptionPane.showConfirmDialog(this,
"프로그램을 종료하시겠습니까?","종료확인",
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE
);
//lbl.setText(Integer.toString(result));
if(result==JOptionPane.YES_OPTION) {
System.exit(0);
}
}
}
}
오늘 배운 내용들은 실무에서 안 쓰는 기술이라 해서 가벼운 마음으로 수업을 들었다.
반응형
'Language > Java' 카테고리의 다른 글
[JAVA+국비교육] XML파일 읽어오기, 정규화 표현식 (0) | 2022.01.17 |
---|---|
[JAVA+국비교육] Class 클래스, 정규화표현식, 채팅프로그램 만들기 (0) | 2022.01.14 |
[JAVA+국비교육] 입출력 Stream (0) | 2022.01.12 |
[JAVA+국비교육] Thread (0) | 2022.01.11 |
[JAVA+국비교육] 예외 처리(Exception), 네이버 로그인 만들기 (0) | 2022.01.10 |
블로그의 정보
무작정 개발
무작정 개발