버튼 클릭시 버튼 내용 바꾸기
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();
}
}
사각형 그리기
package ch14;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
import ch14.EventEx06.MyPanel;
public class PaintJPanelEx extends JFrame {
class MyPanel extends JPanel{
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
g.drawRect(10, 10, 50, 50);
g.drawRect(50, 50, 50, 50);
g.setColor(Color.MAGENTA);
g.drawRect(90, 90, 50, 50);
}
}
private MyPanel panel = new MyPanel();
public PaintJPanelEx() {
setTitle("JPanel의 paintComponent() 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(panel);
setSize(250, 220);
setVisible(true);
}
public static void main(String[] args) {
new PaintJPanelEx();
}
}
선긋기
package ch14;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GraphicsDrawLineEx extends JFrame {
class MyPanel extends JPanel{
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.drawLine(20, 20, 100, 100);
}
}
private MyPanel panel = new MyPanel();
public GraphicsDrawLineEx() {
setTitle("drawLine 사용 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(panel);
setSize(200, 170);
setVisible(true);
}
public static void main(String[] args) {
new GraphicsDrawLineEx();
}
}
다양한 도형 그리기
package ch14;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class GraphicsFillEx extends JFrame {
class MyPanel extends JPanel {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.RED);
g.fillRect(10, 10, 50, 50);
g.setColor(Color.BLUE);
g.fillRect(10, 70, 50, 50);
g.setColor(Color.GREEN);
g.fillRoundRect(10, 130, 50, 50, 20, 20);
g.setColor(Color.MAGENTA);
g.fillArc(10, 190, 50, 50, 0, 270);
g.setColor(Color.ORANGE);
int[] x = {30,10,30,60};
int[] y = {250,275,300,275};
g.fillPolygon(x,y,4);
}
}
private MyPanel panel = new MyPanel();
public GraphicsFillEx() {
setTitle("fillXXX 사용 예제");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setContentPane(panel);
setSize(100, 350);
setVisible(true);
}
public static void main(String[] args) {
new GraphicsFillEx();
}
}
'Programming Language > Java' 카테고리의 다른 글
20200422 // 클래스의 구성, 생성자의 역할, 메서드의 역할, static 메서드를 쓰는 이유, try catch를 쓰는 이유, 드라이버 (0) | 2020.04.22 |
---|---|
자바 그래프 만들기 (xml, json, gson, 공공데이터, SWING) (0) | 2020.04.22 |
20200421 (0) | 2020.04.21 |
자바 SWING, WindowBuilder (0) | 2020.04.20 |
자바 문자 보내기 (0) | 2020.04.17 |