<F1>
키를 입력받으면 컨텐트팬의 배경을 초록색으로, % 키를 입력받으면 노란색으로 변경
이 방법을 찾기 위해 오류를 검색하였으며,정적 클래스와 비정적 클래스의 차이에 대해서 다시 한번 학습하게 되었습니다.
결정적으로 깨우치면서 해당 오류를 잡을 수 있었던 것은 중첩 클래스입니다.
도움이 되었던 자료들의 출처를 남깁니다. 헷갈린 분들이 계신다면 한번 학습하고 오시는 것도 좋은 방법이 될 것입니다.
이에, 학습한 내용을 바탕으로 중첩클래스, 즉 코드에 괄호때문에 중첩클래스가 이상한 것은 아닌가? 라는 생각으로 코드를 분석하였더니, 역시나. 클래스 분류 문제였습니다.
(정상작동)
(실행)
package experience;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class FlyingTextEx extends JFrame {
private final int FLYING_UNIT = 1;
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());
break;
}
}
}
public static void main(String[] args) {
new FlyingTextEx();
}
}
(출력화면)
package experience;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
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 mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
la.setText("mousePressed ("+e.getX()+","+e.getY()+")");
}
public void mouseReleased(MouseEvent e) {
la.setText("mouseReleased ("+e.getX()+","+e.getY()+")");
}
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 void mouseDragged(MouseEvent e) {
la.setText("MouseDragged (" + e.getX() + "," + e.getY() + ")");
}
public void mouseMoved(MouseEvent e) {
la.setText("mouseMoved (" + e.getX() + "," + e.getY() + ")");
}
}
public static void main(String[] args) {
new MouseListenerAllEx();
}
}
package experience;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
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, b, g));
}
}
}
public static void main(String[] args) {
new ClickAndDoubleClickEx();
}
}
(실습문제 10-7 참고)
componnert.addMouseWheelListener(new MouseWheelListener(){
public void mouseWheelMoved(MouseWheelEvent e){
// 마우스 휠의 구르는 방향에 따라 이벤트를 처리한다.
}
}};