명품자바프로그래밍 chapter10_lab9
실습1| GUI 작성
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class GuiTest extends JFrame{
JPanel pw = new JPanel();
JTextField pt1, pt2,pt3,pt4;
JButton pb1, pb2;
public GuiTest() {
setTitle("Gui Test"); //창의 레이블
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //X 눌렀을 때 닫히도록
Container c = getContentPane(); //컨테이너 선언
c.setLayout(new BorderLayout(10,10)); //컴포넌트 사이의 수평 수직 간격이 10,10 픽셀이 되도록 배치 관리자 설정
MyListener ml = new MyListener(); //이벤트 선언
pw.setLayout(new GridLayout(4,1)); // 4행 1열의 GRidLayout
pw.add(new JLabel("이름"));
pw.add(new JLabel("학번"));
pw.add(new JLabel("전공"));
pw.add(new JLabel("연락처"));
c.add(pw,BorderLayout.WEST); //서쪽에
JPanel ptf = new JPanel(new GridLayout(4,1,0,10));
pt1 = new JTextField(5); pt2 = new JTextField(5); pt3 = new JTextField(5); pt4 = new JTextField(5); //JTextField 선언
ptf.add(pt1);ptf.add(pt2);ptf.add(pt3);ptf.add(pt4); //Panel에 추가
pt1.addActionListener(ml);pt2.addActionListener(ml);pt3.addActionListener(ml);pt4.addActionListener(ml); //이벤트 추가
c.add(ptf, BorderLayout.CENTER); //pt1,2,3,4 가 들어 있는 ptf pannel의 위치는 Center
JPanel jb = new JPanel(new FlowLayout()); //FlowLayout의 레이아웃(왼--> 오 )
pb1 = new JButton("확인"); //확인 출력
pb2 = new JButton("취소"); //취소 출력
jb.add(pb1); jb.add(pb2); //Panel에 pb1 pb2 추가
pb1.addActionListener(ml); pb2.addActionListener(ml); //이벤트 추가
c.add(jb, BorderLayout.SOUTH); //남쪽에
setSize(350,250); // 프레임 크기 350X300 설정
setVisible(true); //프레임을 화면에 출력
}
private class MyListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
JButton b = (JButton)e.getSource();
if(b.getText().equals("확인")) { //확인을 눌렀을 떄
System.out.println(pt1.getText() +"\t" + pt2.getText() +"\t" + pt3.getText() +"\t" + pt4.getText());
}
else {//리셋
pt1.setText(""); //JTextField 값을 리셋
pt2.setText(""); //JTextField 값을 리셋
pt3.setText(""); //JTextField 값을 리셋
pt4.setText(""); //JTextField 값을 리셋
}
}
}
public static void main(String[] args) {
new GuiTest();
}
}
실습2| 계산하는 GUI 구현
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class CalcFrame extends JFrame{
JTextField num1, num2, result; // 두개의 값을 입력 받음
JLabel lbl; // x 를 표현할 Label
JButton btn; // = 버튼
int r_num = 0; // 곱한 값을 저장하는 변수
public CalcFrame(){
setTitle("계산기"); //창 레이블 설정
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //X눌럿을때 창을 닫도록
Container c = getContentPane(); //컨테이너 선언
c.setLayout(new FlowLayout()); // 레이아웃은 FlowLayout으로
MyListener ml = new MyListener(); //이벤트 선언
num1 = new JTextField(5); //num1
num1.addActionListener(ml); //이벤트에 추가
lbl = new JLabel("X"); //곱하기를 나타냄
num2 = new JTextField(5); //um2
num2.addActionListener(ml); //이벤트에 추가
btn = new JButton("="); //=을 나타낼 버튼
btn.addActionListener(ml); //이벤트에 추가
result = new JTextField(10); //계산 결과
result.addActionListener(ml); //이벤트에 추가
c.add(num1); c.add(lbl); c.add(num2); c.add(btn); c.add(result); //컨테이너에 추가
setSize(400,100);
setVisible(true);
}
private class MyListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
String num_1 = num1.getText(); //num_1에 입력받은 숫자(문자열 형태)를 받음
int num1 = Integer.parseInt(num_1); // num1에 다시 입력받은 문자열을 정수로 변환
String num_2 = num2.getText(); //num_1과 같은 방법
int num2 = Integer.parseInt(num_2); //num1_1과 같은 방법
JButton b = (JButton)e.getSource();
if(b.getText().equals("=")) { // = 버튼을 눌렀을 떄
int a = num1 * num2 ; //정수형태로 변환한 값을 곱하기
result.setText(a+ ""); //출력
}
}
}
public static void main(String[] args) {
new CalcFrame();
}
}
실습3| Mouse 이벤트
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class MouseEventFrame extends JFrame{
public MouseEventFrame() {
setTitle("마우스 올리기 내리기");//창의 네임? 설정
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //X클릭했을때 닫히도록
Container c = getContentPane(); //컨테이너 선언
c.setLayout(new FlowLayout()); //Layout은 FlowLayout으로
JLabel JL= new JLabel("사랑해"); //JLabel을 사용해 사랑해 출력
c.add(JL); //컨테이너에 추가
JL.addMouseListener(new MouseAdapter(){ //익명클래스로 구현, MouseAdapter 클래스 활용
public void mouseEntered(MouseEvent e) { //MouseEnterd 메소드 구현
JLabel J = (JLabel)e.getSource();
J.setText("Love Java"); //마우스를 올리면 Love Java 출력
}
public void mouseExited(MouseEvent e) { //mouseExited 메소드 구현
JLabel L = (JLabel)e.getSource();
L.setText("사랑해"); // 마우스를 내리면 사랑해 출력
}
});
setSize(400,200);
setVisible(true);
}
public static void main(String[] args) {
new MouseEventFrame();
}
}
실습4| 클릭 스윙 프로그램
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class ClickPracticeFrame extends JFrame{
JLabel JL;
public ClickPracticeFrame() {
setTitle("클릭 연습 용 응용프로그램");//창의 네임? 설정
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //X클릭했을때 닫히도록
Container c = getContentPane(); //컨테이너 설정
c.setLayout(null); //레이아웃 없음
JL = new JLabel("C");//C를 출력하는 JLabel 하나 만들기
JL.addMouseListener(new MyMouseListener()); // 클릭했을 때의 이벤트 추가
JL.setSize(10,10); //C글짜의 크기 지정
JL.setLocation(100,100); //글자의 위치를 100,100 으로 지정
c.add(JL); //컨테이너의 추가
setSize(400,400); //창의 크기 지정
setVisible(true); // 창이 보이도록
}
private class MyMouseListener extends MouseAdapter{
@Override
public void mouseClicked(MouseEvent e) { //Adapter를 통해 clicked 했을 때만 오바라이드
int x = (int)(Math.random()*299+1); //300까지 , 글씨가 10,10 이라 399+1 했을 떄 글씨가 사라지는 경우에 대비해서 조금 작게 설정
int y = (int)(Math.random()*299+1); //300까지
JL.setLocation(x,y); //랜덤으로 바뀐 x,y 값을 JL의 위치로 재설정
}
}
public static void main(String[] args) {
new ClickPracticeFrame();
}
}
실습5| 드래기 스윙 프로그램
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class MouseDraggingFrame extends JFrame{
Container c; //컨테이너 선언
public MouseDraggingFrame() {
setTitle("드래깅동안 YELLOW"); //창의 네임? 설정
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //X눌렀을 때 닫히도록
c = getContentPane();
c.setLayout(null); //컨테이너의 레이아웃 없음
c.setBackground(Color.GREEN);//기본 배경색을 초록으로
c.addMouseMotionListener(new MyMouseMotionAdapter()); //마우스 드래그 했을 때의 이벤트 추가
c.addMouseListener(new MyMouseListener()); //마우스를 땠을 때의 이벤트 추가
setSize(400,200); //크기 지정
setVisible(true); //창이 보이도록 지정
}
private class MyMouseMotionAdapter extends MouseMotionAdapter{
@Override
public void mouseDragged(MouseEvent e) {
c.setBackground(Color.YELLOW); //마우스 드래그 했을 때 색이 노랑색이 되도록 설정
}
}
private class MyMouseListener extends MouseAdapter{
@Override
public void mouseReleased(MouseEvent e) {
c.setBackground(Color.GREEN); //마우스를 땠을 때 색이 다시 초록이 되도록 설정
}
}
public static void main(String[] args) {
new MouseDraggingFrame();
}
}
실습6| 화살표키를 사용한 스윙 프로그램
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class MoveStringFrame extends JFrame{
JLabel JL; //JL 미리선언
String text = "Love Java"; //text도 선언
public MoveStringFrame() {
setTitle("Left 키로 문자열 회전"); //창의 네임? 설정
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //X눌렀을 때 닫히도록
Container c = getContentPane(); //컨테이너 선언
c.setLayout(new FlowLayout()); //FlowLayout 지정
JL = new JLabel("Love Java"); //JLabel 을 사용해 Love Java 보여줌
JL.addKeyListener(new MyKeyAdapter()); //이벤트 추가
JL.setSize(200,30); //JL의 크기를 지정
c.add(JL); //컨테이너에 JL을 추가
setSize(400,200); //창의 크기 지정
setVisible(true); //창이 보이도록 지정
JL.requestFocus(); //키 이벤트를 받을 컴포넌트를 강제로 설정
}
private class MyKeyAdapter extends KeyAdapter{
@Override
public void keyPressed(KeyEvent e) { //keyPressd만 오버라이드 하기
int keyCode = e.getKeyCode();
String LJ1, LJ2;
if(keyCode == KeyEvent.VK_LEFT) {
LJ1 = text.substring(1); //1번째부터 끝까지 문자열 받아오기
LJ2 = text.substring(0,1); //0번째 문자열 받아오기
text = LJ1.concat(LJ2); //1번째~끝번째 먼저 다음에 0번째 문자를 붙이기 concat사용
JL.setText(text); //JL에 바꾼 text를 설정하기
}
}
}
public static void main(String[] args) {
new MoveStringFrame();
}
}
'Programming > JAVA' 카테고리의 다른 글
그래픽 (0) | 2020.12.30 |
---|---|
기본적인 스윙 컴포넌트와 활용 (0) | 2020.12.30 |
자바 GUI 기초, AWT와 스윙 (0) | 2020.12.30 |
자바 기말 플젝 코드(미완성) (0) | 2020.12.30 |
입출력 스트림과 파일 입출력 (0) | 2020.10.16 |
댓글