썬글라스가 잘 어울리는 개발고미
DEV on the Beach
썬글라스가 잘 어울리는 개발고미
전체 방문자
오늘
어제
  • 분류 전체보기 (83)
    • 공부 기록노트 (7)
      • React (3)
      • java (15)
      • !오류 (1)
      • html css (1)
      • javascript (11)
      • JSP (4)
      • python (16)
      • network (0)
      • Oracle (6)
      • Git (1)
      • 정보처리기사 (4)
      • plug-in (1)
      • 프로그램 설치 (0)
      • Spring (0)
      • CS (0)
    • 신기술 동향 (0)
    • 맛집 카페 리뷰 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 파이썬
  • 혼공
  • 제이쿼리
  • Collection Framework
  • 핸드드립
  • 리액트
  • 프로그래머스문제풀이
  • java
  • JSP
  • ArrayList

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
썬글라스가 잘 어울리는 개발고미

DEV on the Beach

[Java] JFrame이란? 그리고 Swing을 이용한 GUI 프로그래밍 예제
공부 기록노트/java

[Java] JFrame이란? 그리고 Swing을 이용한 GUI 프로그래밍 예제

2023. 1. 1. 15:46
더보기

 

JFrame이란?

💡 한마디로 설명하자면 jframe은 java swing 클래스의 일부이며 구현되는 하나의 창이다.

      스윙은 자바에서 그래픽 사용자 인터페이스를 구현하기 위하여 제공되는 클래스이다.

      또한 버튼, 창, 표, 트리 등의 컴포넌트들을 이용할 수 있게 해주는 클래스 이다.

 

예) TestJFrame.java

 

Swing 예제 통해 알아가기!

 

버튼클릭이벤트 예제1

(Good Mornint->Good Evening)

Swing01.java  

더보기

1) new → other → WindowBuilder->Swing Designer->Application Window

 

2) 해당 소스폴더의 패키지안에 Swing01.java 라는 이름의 JFrame파일을 생성한다.

Superclass → javax.swing.JFrame

3) 아래 같이 코드를 자동완성시켜준다. 이제 Design을 눌러주자.

package day04;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class Swing01 extends JFrame {

	private JPanel contentPane;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Swing01 frame = new Swing01();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Swing01() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

		setContentPane(contentPane);
	}

}

위에서 봤을 때 Runnable()과 run()이라는 메소드를 보았을때 대충 스레드의 사용과 비슷하단 감이 왔다.

또 전체적인 코드를 보았을 때 frame의 생성과

패널이 생성되었음을 알 수 있다.

우리는 패널위에 버튼과 같은 이벤트 도구를 사용하여 프로그램을 작성해볼것이다.

밑에 Design을 누르면 디자인을 개략적으로 볼 수 있다.

드래그 앤 드롭으로 컴포넌트를 이동시키는것 역시 가능하다.

 

4) 이클립스 WindewBuilder Design Tool 이용하기

디자인 툴? 이 제공된다.

작성예제) 버튼을 클릭하면 Good Morning 과 Good Evening 텍스트가 출력

각 컴포넌트들을 이용해서 만들어보자

Components에서 사용할 것들을 드래그앤 드롭하여 올려놓아보자

아래와 같이 프레임위에 패널이 자동형성되어있을 것이다. 

panel을 클릭하면 왼쪽에 proper가 보이고, Layout 에 (absolute)로 설정해주자.

라벨을 클릭하여 Variable 과 text를 변경해주자. 마찬가지로 버튼도 변경해주자.

Variable은 자바코드에서 사용할 변수이다.

 

마우스 클릭이벤트를 줄때는 proper 옆에 이 아이콘을 클릭하여 clicked 을 두번 클릭!

클릭하면 addMouseListener(new MouseAdapter() { ……. }; 와 같은 소스가 추가된다.

버튼을 클릭하면 스위치식으로 바뀌는 형태로 만들어보려고한다.

Run 실행하기!

package day04;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class Swing01 extends JFrame {
	// f 전역변수로 빼기 
	boolean f = true;
	private JPanel contentPane;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Swing01 frame = new Swing01();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Swing01() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lbl = new JLabel("Good Morning");
		lbl.setBounds(62, 54, 90, 43);
		contentPane.add(lbl);
		
		JButton btn = new JButton("Click");
		btn.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
					
					// 프로그램이 동작할 코드 작성
					if(f==true) {
						lbl.setText("Good Evening");
						f=false;
					}else {
						lbl.setText("Good Morning");
						f=true;
					}
			}
		});

		btn.setBounds(180, 50, 105, 47);
		contentPane.add(btn);
	}
}

 

버튼클릭이벤트 예제2

(버튼을 눌러 숫자 증가시키기)

Swing02.java  

더보기
package day04;

import java.awt.EventQueue;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class Swing02 extends JFrame {

	private JPanel contentPane;
	JLabel lbl;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Swing02 frame = new Swing02();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Swing02() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		lbl = new JLabel("10000");
		lbl.setBounds(77, 49, 57, 15);
		contentPane.add(lbl);
		
		JButton btn = new JButton("increase");
		btn.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
//				String a = lbl.getText();
//				int count= Integer.parseInt(a);
//				count++;
//				String ct = String.valueOf(count);
//				lbl.setText(ct);
//				
				myclick();
			}
		});
		btn.setBounds(171, 45, 97, 23);
		contentPane.add(btn);
	}
	
	public void myclick() {
		String a = lbl.getText();
		int aa = Integer.parseInt(a);
		aa++;
		//숫자를 문자로바꾸기
		//lbl.setText(aa + "");
		lbl.setText(Integer.toString(aa));
	}
}

예제. textField에 2~9사이의 숫자를 입력하여 구구단을 출력해보자.

버튼클릭이벤트 예제3

( textField에 2~9사이의 숫자를 입력하여 구구단을 출력해보기)

Swing03.java  

더보기
package day04;

import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.JTextArea;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
// 구구단 쌤코드
public class Swing04 extends JFrame {

	private JPanel contentPane;
	private JTextField tf;
	//전역변수로 ta 빼기
	JTextArea ta;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Swing04 frame = new Swing04();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public Swing04() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lbl = new JLabel("출력단수");
		lbl.setBounds(96, 38, 57, 15);
		contentPane.add(lbl);
		
		tf = new JTextField();
		tf.setBounds(179, 35, 116, 21);
		contentPane.add(tf);
		tf.setColumns(10);
		
		JButton btn = new JButton("출력하기");
		btn.addMouseListener(new MouseAdapter() {
			@Override
			public void mouseClicked(MouseEvent e) {
				myclick();
			}
		});
		btn.setBounds(96, 66, 199, 23);
		contentPane.add(btn);
		
		//전역변수로 빼놓았기때문에  JTextArea 타입을 빼기
		ta = new JTextArea();
		ta.setBounds(96, 99, 199, 152);
		contentPane.add(ta);
	}
	
	public void myclick() {
		String txt = "";
		
		String dan = tf.getText();
		int idan = Integer.parseInt(dan);
		
		txt += idan +" * "+1+"="+(idan*1)+"\n";
		txt += idan +" * "+2+"="+(idan*2)+"\n";
		txt += idan +" * "+3+"="+(idan*3)+"\n";
		txt += idan +" * "+4+"="+(idan*4)+"\n";
		txt += idan +" * "+5+"="+(idan*5)+"\n";
		txt += idan +" * "+6+"="+(idan*6)+"\n";
		txt += idan +" * "+7+"="+(idan*7)+"\n";
		txt += idan +" * "+8+"="+(idan*8)+"\n";
		txt += idan +" * "+9+"="+(idan*9)+"\n";
		
		
		ta.setText(txt);
		
	}
}

 

'공부 기록노트 > java' 카테고리의 다른 글

[Java] android studio를 이용하여 별찍기  (0) 2023.01.01
[Java] android studio를 이용하여 로또복권당첨번호 생성하기  (0) 2023.01.01
[Java]자바 스윙( Swing ) / WindowBuilder 개념 및 설치 방법  (0) 2023.01.01
[Java] GUI 프로그래밍을 위한 AWT  (0) 2023.01.01
[조건문] if문과 switch문  (0) 2022.10.02
    '공부 기록노트/java' 카테고리의 다른 글
    • [Java] android studio를 이용하여 별찍기
    • [Java] android studio를 이용하여 로또복권당첨번호 생성하기
    • [Java]자바 스윙( Swing ) / WindowBuilder 개념 및 설치 방법
    • [Java] GUI 프로그래밍을 위한 AWT
    썬글라스가 잘 어울리는 개발고미
    썬글라스가 잘 어울리는 개발고미

    티스토리툴바