JAVA
[자바] Gui 프로그래밍
유진
2020. 1. 18. 15:37
반응형
1. 마우스로 텍스트 움직이기
package hello;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class MouseListenerEx extends JFrame{
private JLabel la = new JLabel("hello");
public MouseListenerEx() {
setTitle("Mouse 이벤트 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);;
Container c = getContentPane();
c.addMouseListener(new MyMouseListener());
c.setLayout(null);
la.setSize(50,20);
la.setLocation(30, 30);
c.add(la);
setSize(250, 250);
setVisible(true);
}
class MyMouseListener implements MouseListener {
public void mousePressed(MouseEvent e) {
int x = e.getX();
int y = e.getY();
la.setLocation(x, y);
}
public void mouseReleased(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
}
public static void main(String[] args) {
new MouseListenerEx();
}
}
class MyMouseListener implements MouseListener {
public void mousePressed(MouseEvent e) {
int x = e.getX();
int y = e.getY();
la.setLocation(x, y);
}
public void mouseReleased(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
}
를 Adapter를 이용하여 간추릴 수 있다.
class MyMouseAdapter extends MouseAdapter {
public void mousePressed(MouseEvent e) {
int x = e.getX();
int y = e.getY();
la.setLocation(x, y);
}
}
완성된 코드
package hello;
import javax.swing.*; // 스윙 컴포넌트 api
import java.awt.*; // 그래픽을 처리하는 api
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class MouseListenerEx extends JFrame /*컨테이너 */{
private JLabel la = new JLabel("hello");
public MouseListenerEx() {
setTitle("Mouse 이벤트 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// EXIT_ON_CLOSE : 종료할때 에플리케이션도 함께 종료
Container c = getContentPane();
c.addMouseListener(new MyMouseAdapter());
c.setLayout(null);
la.setSize(50,20);
la.setLocation(30, 30);
c.add(la);
setSize(250, 250);
setVisible(true); // 스윙 프레임 출력
}
class MyMouseAdapter extends MouseAdapter {
public void mousePressed(MouseEvent e) {
int x = e.getX();
int y = e.getY();
la.setLocation(x, y);
}
}
public static void main(String[] args) {
new MouseListenerEx();
}
}
결과는 첫번째 코드와 같지만 코드의 길이가 짧아진 것을 알 수 있다.
2. 상하좌우키로 텍스트 움직이기
package hello;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class FlyingTextEx extends JFrame{
private final int FLYING_UNIT = 10;
private JLabel la = new JLabel("HELLO");
public FlyingTextEx() {
setTitle("상,하,좌,우 키를 이용하여 텍스트 움직이기");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(null);
c.addKeyListener(new MyKeyListener());
la.setLocation(50,50);
la.setSize(100, 20);
c.add(la);
setSize(300,300);
setVisible(true);
c.setFocusable(true);
c.requestFocus();
c.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
Component com = (Component)e.getSource();
com.setFocusable(true);
com.requestFocus();
}
});
}
class MyKeyListener extends KeyAdapter {
public void keyPressed(KeyEvent e) {
int KeyCode = e.getKeyCode();
switch (KeyCode) {
case KeyEvent.VK_UP:
la.setLocation(la.getX(), la.getY()-FLYING_UNIT);
break;
case KeyEvent.VK_DOWN:
la.setLocation(la.getX(), la.getY()+FLYING_UNIT);
break;
case KeyEvent.VK_LEFT:
la.setLocation(la.getX()-FLYING_UNIT, la.getY());
break;
case KeyEvent.VK_RIGHT:
la.setLocation(la.getX()+FLYING_UNIT, la.getY());
default:
break;
}
}
}
public static void main(String[] args) {
new FlyingTextEx();
}
}
3.마우스와 마우스 모션 이벤트 활용
package hello;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class MouseListenerAllEx extends JFrame{
private JLabel la = new JLabel("No Mouse Event");
public MouseListenerAllEx() {
setTitle("MouseListener와 MouseMotionListener 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
MyMouseListener listener = new MyMouseListener();
c.addMouseListener(listener);
c.addMouseMotionListener(listener);
c.add(la);
setSize(300, 200);
setVisible(true);
}
class MyMouseListener implements MouseListener, MouseMotionListener{
public void mousePressed(MouseEvent e) {
la.setText("mousePressed("+ e.getX()+", "+e.getY()+")");
}
public void mouseReleased(MouseEvent e) {
la.setText("mouseReleased("+ e.getX()+", "+e.getY()+")");
}
@Override
public void mouseDragged(MouseEvent e) {
la.setText("mouseDragged("+ e.getX()+", "+e.getY()+")");
}
@Override
public void mouseMoved(MouseEvent e) {
la.setText("mouseMoved("+ e.getX()+", "+e.getY()+")");
}
@Override
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {
Component c = (Component)e.getSource();
c.setBackground(Color.CYAN);
}
public void mouseExited(MouseEvent e) {
Component c = (Component)e.getSource();
c.setBackground(Color.YELLOW);
}
}
public static void main(String[] args) {
new MouseListenerAllEx();
}
}
4. 키를 입력받으면 컨텐트팬의 배경을 초록색으로, % 키를 입력받으면 노란색으로 변경
package hello;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class KeyCodeEx extends JFrame{
private JLabel la = new JLabel();
public KeyCodeEx() {
setTitle("key Code 예제 : f1 키 - 초록색, %키 - 노란색");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.addKeyListener(new MyKeyListener());
c.add(la);
setSize(300, 150);
setVisible(true);
c.setFocusable(true);
c.requestFocus();
}
class MyKeyListener extends KeyAdapter {
public void keyPressed(KeyEvent e) {
Container contentPane = (Container)e.getSource();
la.setText(e.getKeyText(e.getKeyCode()));
if(e.getKeyChar() == '%') {
contentPane.setBackground(Color.YELLOW);
}
else if(e.getKeyCode() == KeyEvent.VK_F1) {
contentPane.setBackground(Color.GREEN);
}
}
}
public static void main(String[] args) {
new KeyCodeEx();
}
}
(원래는 화면에 f1과 %가 나오는데 캡쳐를 했더니... alt가 나왔다...)
5. 더블클릭 시 컨텐트팬의 배경색 변경
package hello;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ClickAndDoubleClickEx extends JFrame{
public ClickAndDoubleClickEx() {
setTitle("Click and DoubleClick 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.addMouseListener(new MyMouseListener());
setSize(300,200);
setVisible(true);
}
class MyMouseListener extends MouseAdapter {
public void mouseClicked(MouseEvent e) {
if(e.getClickCount() == 2) {
int r = (int )(Math.random()* 256);
int g = (int )(Math.random()* 256);
int b = (int )(Math.random()* 256);
Component c = (Component)e.getSource();
c.setBackground(new Color(r,g,b));
}
}
}
public static void main(String[] args) {
new ClickAndDoubleClickEx();
}
}
반응형