버튼 클릭시 버튼 내용 바꾸기

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();
	}
}

 

+ Recent posts