package dateex;
import java.util.HashSet;
import java.util.Random;
public class Lotto {
public static void main(String[] args) {
// HashSet 순서가 없음 (엄청빠름)
// TreeSet 순서대로 정렬 (HashSet보다 느림)
HashSet<Integer> lotto = new HashSet<>();
Random r = new Random();
while (lotto.size() < 6) {
int value = r.nextInt(45) + 1;
lotto.add(value);
}
System.out.println(lotto);
}
}
package dateex;
import java.util.StringTokenizer;
public class StringTokenizer1 {
public static void main(String[] args) {
StringTokenizer st = new StringTokenizer("a=3,b=5,c=6", ","); // 구분자로 ',' 사용
while (st.hasMoreTokens()) {
System.out.println(st.nextToken());
}
}
}
package ch14;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
// 외부 클래스로 리스너 타겟 생성
class MyActionListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
JButton b = (JButton) e.getSource();
if (b.getText().equals("Action")) {
b.setText("액션");
} else {
b.setText("Action");
}
}
}
public class EventEx011 extends JFrame {
public EventEx011() {
setTitle("Action 이벤트 리스너 예제");
// x버튼 클릭시 이벤트 분배스레드 끄기
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.setLayout(new FlowLayout());
JButton btn = new JButton("Action");
// 리스너 생성
btn.addActionListener(new MyActionListener());
c.add(btn);
setSize(350,150);
setVisible(true);
}
public static void main(String[] args) {
new EventEx011();
}
}
창 내에서 클릭시 라벨이 움직이도록 설정
package ch14;
import java.awt.Container;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class EventEx04 extends JFrame {
private JLabel la; // new 는 생성자에서 하자
public EventEx04() {
la = new JLabel("Hello");
setTitle("MouseEvent 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.addMouseListener(new MyMouseListener());
c.setLayout(null); // absolute 레이아웃
la.setSize(50, 20); // 라벨의 사이즈
la.setLocation(30, 30); // 라벨의 위치
c.add(la);
setSize(250, 250);
setVisible(true); // paint()
}
class MyMouseListener extends MouseAdapter{
// 마우스를 클릭하고 놓았을 때
@Override
public void mousePressed(MouseEvent e) {
int x = e.getX(); // x 좌표
int y = e.getY(); // y 좌표
la.setLocation(x, y); // 라벨 위치 변경
}
}
public static void main(String[] args) {
new EventEx04();
}
}
창 내에서 클릭시 마우스가 흐르면서 움직이도록 만들기
package ch14;
import java.awt.Container;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class EventEx05 extends JFrame {
private JLabel la; // new 는 생성자에서 하자
int nowY = 0;
Container c;
public EventEx05() {
la = new JLabel("Hello");
setTitle("MouseEvent 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
c = getContentPane();
c.addMouseListener(new MyMouseListener());
c.setLayout(null); // absolute 레이아웃
la.setSize(50, 20); // 라벨의 사이즈
la.setLocation(30, 30); // 라벨의 위치
c.add(la);
setSize(250, 250);
setVisible(true); // paint()
}
class MyMouseListener extends MouseAdapter {
// 마우스를 클릭하고 놓았을 때
@Override
public void mousePressed(MouseEvent e) {
int x = e.getX(); // x 좌표
int y = e.getY(); // y 좌표
nowY = la.getY();
if (la.getY() < y) {
new Thread(new Runnable() {
@Override
public void run() {
while (la.getY() < y) {
// setLocation은 repaint를 들고 있다
la.setLocation(x, nowY + 1); // 라벨 위치 변경
nowY = la.getY();
try {
Thread.sleep(10);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}).start();
} else if (la.getY() > y) {
new Thread(new Runnable() {
@Override
public void run() {
while (la.getY() > y) {
la.setLocation(x, nowY - 1); // 라벨 위치 변경
nowY = la.getY();
try {
Thread.sleep(10);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}).start();
}
}
}
public static void main(String[] args) {
new EventEx05();
}
}
더블클릭 리스너
package ch14;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
public class ClickAndDoubleClickEx extends JFrame {
class MyMouseListener extends MouseAdapter{
@Override
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 ClickAndDoubleClickEx() {
setTitle("Click and DoubleClick 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = getContentPane();
c.addMouseListener(new MyMouseListener());
setSize(300, 200);
setVisible(true);
}
public static void main(String[] args) {
new ClickAndDoubleClickEx();
}
}
키 리스너 구현 (키를 입력하면 아스키 코드 출력)
package ch14;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class KeyListenerEx extends JFrame {
private JLabel[] keyMessage;
public KeyListenerEx() {
setTitle("keyListener");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c= getContentPane();
c.setLayout(new FlowLayout());
c.addKeyListener(new MyKeyListener());
// 레이블배열을 3개 생성하고 각레이블 컴포넌트생성
keyMessage = new JLabel[3]; // 레이블 배열 생성
keyMessage[0] = new JLabel(" getKeyCode() ");
keyMessage[1] = new JLabel(" getKeyCode() ");
keyMessage[2] = new JLabel(" getKeyCode() ");
// 3개의 레이블 컴포넌트를 컨텐트팬에 부착
for (int i = 0; i < keyMessage.length; i++) {
c.add(keyMessage[i]);
keyMessage[i].setOpaque(true); // 배경색이 보이도록 불투명 속성 설정
keyMessage[i].setBackground(Color.YELLOW);
}
setSize(300, 150);
setVisible(true);
// 컨텐트팬이 키입력을 받을 수 있도록 포커스 강제 지정
c.setFocusable(true);
c.requestFocus();
}
// key 리스너 구현
class MyKeyListener extends KeyAdapter {
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
char keyChar = e.getKeyChar();
keyMessage[0].setText("아스키코드 : " + Integer.toString(keyCode));
keyMessage[1].setText("char : " + Character.toString(keyChar));
keyMessage[2].setText(KeyEvent.getKeyText(keyCode));
System.out.println("KeyPressed");
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("keyReleased");
}
@Override
public void keyTyped(KeyEvent e) {
System.out.println("KeyTyped");
}
}
public static void main(String[] args) {
new KeyListenerEx();
}
}
- 컴포넌트가 처음으로 그려질 때 - 컴포넌트의 크기나 위치 변경 등 컴포넌트에 변화가 생길 때 - 다른 윈도우에 의해 가려졌다가 드러날 때 - 아이콘화되었다가 본래 크기로 복구할 때 - 응용프로그램이 컴포넌트의 repaint() 메소드를 호출하여 강제로 다시 그릴 때
JFrame에서는 paintComponent()가 먹히지 않는다
setLocation() setText() 등은 repaint()를 들고있다
이벤트 분배 스레드는 repaint를 한번만 하도록 되어있다
package ch14;
import java.awt.Container;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class EventEx05 extends JFrame {
private JLabel la; // new 는 생성자에서 하자
int nowY = 0;
Container c;
public EventEx05() {
la = new JLabel("Hello");
setTitle("MouseEvent 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
c = getContentPane();
c.addMouseListener(new MyMouseListener());
c.setLayout(null); // absolute 레이아웃
la.setSize(50, 20); // 라벨의 사이즈
la.setLocation(30, 30); // 라벨의 위치
c.add(la);
setSize(250, 250);
setVisible(true); // paint()
}
class MyMouseListener extends MouseAdapter {
// 마우스를 클릭하고 놓았을 때
@Override
public void mousePressed(MouseEvent e) {
int x = e.getX(); // x 좌표
int y = e.getY(); // y 좌표
nowY = la.getY();
if (la.getY() < y) {
new Thread(new Runnable() {
@Override
public void run() {
while (la.getY() < y) {
// setLocation은 repaint를 들고 있다
la.setLocation(x, nowY + 1); // 라벨 위치 변경
nowY = la.getY();
try {
Thread.sleep(10);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}).start();
} else if (la.getY() > y) {
new Thread(new Runnable() {
@Override
public void run() {
while (la.getY() > y) {
la.setLocation(x, nowY - 1); // 라벨 위치 변경
nowY = la.getY();
try {
Thread.sleep(10);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}).start();
}
}
}
public static void main(String[] args) {
new EventEx05();
}
}