Java에서 GUI 앱을 만드는 방법

Jan 31 2023
개요 Java에서 스윙은 GUI 애플리케이션을 구축하는 데 사용됩니다. 그것은 다른 기능을 가지고 있으며 Java에서 GUI 응용 프로그램을 구축하는 데 널리 사용됩니다.

개요

Java에서 스윙은 GUI 애플리케이션을 구축하는 데 사용됩니다. 그것은 다른 기능을 가지고 있으며 Java에서 GUI 응용 프로그램을 구축하는 데 널리 사용됩니다. 이 기사에서는 Java의 스윙 라이브러리에 대한 모든 것을 다룰 것입니다.

자바 스윙

Swing은 순수 자바로 개발되었습니다. 스윙 구성 요소는 모든 플랫폼에서 동일한 모양과 느낌을 가질 수 있으며 플러그 가능한 모양과 느낌을 제공합니다. 스윙 구성 요소는 가볍습니다.

예:

크리에이티브를 표시하고 프레임을 표시하는 자바 프로그램

import javax.swing.*;

클래스 F1은 JFrame{을 확장합니다.

F1() {

setSize(200,200);

setTitle("GUI 데모");

setLocation(100,200);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setVisible(참);

}

공개 정적 무효 메인(문자열 인수[]){

F1 f= 새로운 F1();

}

}

산출:

javac F1.자바

자바 F1

컨테이너 계층

최상위 컨테이너:

  • 다른 스윙 구성 요소가 스스로 페인트할 수 있도록 배치
  • 예. JFrame, JDialog, JApplet
  • 원자 구성 요소의 배치 단순화
  • 예: JPanel, JSplitPane, JTabbedPane
  • 사용자에게 정보를 제공하고 사용자로부터 입력을 받는 자급자족 구성 요소
  • 예: JButton, JLabel, JComboBox, JTextField, JTable
  • JButton은 "푸시" 버튼의 구현입니다.
  • 버튼을 구성할 수 있으며 동작으로 어느 정도 제어할 수 있습니다.
  • JOptionPane을 사용하면 사용자에게 값을 묻거나 정보를 알려주는 표준 대화 상자를 쉽게 팝업할 수 있습니다.
  • 메서드 수가 많기 때문에 클래스가 복잡해 보일 수 있지만 이 클래스의 거의 모든 용도는 아래 표시된 정적 메서드 중 하나에 대한 한 줄 호출입니다.

클래스가 변수와 메서드를 멤버로 가질 수 있는 것처럼 클래스는 중첩 클래스라는 다른 클래스도 포함할 수 있습니다.

내부 클래스의 개념은 Java 1.1에서 도입되었습니다.

내부 클래스를 사용하면 다음과 같은 몇 가지 이점이 있습니다.

  • 코드를 더 읽기 쉽게 만들기
  • 유틸리티 클래스를 사용하는 클래스 내에서 캡슐화되도록 허용
  • 클래스 작성 프로세스를 단순화하여 실제로 개발자가 보다 객체 지향적이 되도록 장려합니다.

내부 클래스의 유형은 다음과 같습니다.

  • 멤버 내부 클래스
  • 정적 내부 클래스
  • 로컬 내부 클래스
  • 익명 클래스

멤버 내부 클래스를 사용한 이벤트 처리:

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

클래스 M1은 JFrame을 확장합니다.

{

컨테이너 c;

J버튼 b1, b2;

클래스 L1은 ActionListener를 구현합니다.

{

공공 무효 actionPerformed(ActionEvent ae){

if(ae.getSource()==b1)

{

JOptionPane.showMessageDialog(c, "버튼 1을 클릭하셨습니다.");

}

if(ae.getSource()==b2)

{

JOptionPane.showMessageDialog(c,"버튼 2를 클릭하셨습니다.");

}

}

}

M1()

{

c=getContentPane();

c.setLayout(new FlowLayout());

b1=new JButton("클릭 1");

b2= new JButton("클릭 2");

c.add(b1);

c.add(b2);

L1a= 새로운 L1();

b1.addActionListener(a);

b2.addActionListener(a);

}

공개 정적 무효 메인(문자열 인수[]){

M1 f= 새로운 M1();

f.setSize(200,200);

f.setTitle("버튼 클릭");

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.setVisible(참);

}

}

레이아웃 관리자

Java의 레이아웃 관리자는 구성 요소가 프레임에 추가될 때 구성 요소가 배열되는 방식을 결정합니다. AWT 패키지에는 다음 레이아웃 클래스가 포함됩니다.

  • FlowLayout
  • BorderLayout
  • 그리드 레이아웃

FlowLayout

흐름 레이아웃은 더 이상 공간이 없을 때까지 구성 요소를 단락의 텍스트 줄과 같은 방향 흐름으로 정렬한 다음 다음 줄로 정렬합니다.

기본적으로 구성요소는 중앙에 배치됩니다. 프로그래머는 생성자와 함께 다음 인수 중 하나를 사용하여 정렬을 지정할 수 있습니다.

  • FlowLayout.LEFT
  • FlowLayout.CENTER
  • FlowLayout.RIGHT

경계 레이아웃은 컨테이너를 배치하고 해당 구성 요소를 북쪽, 남쪽, 동쪽, 서쪽 및 중앙의 5개 지역에 맞게 배열하고 크기를 조정합니다.

각 지역은 하나 이상의 구성 요소를 포함할 수 없으며 NORTH, SOUTH, EAAST, WEST 및 CENTER와 같은 해당 상수로 정의됩니다.

프로그래머는 add 메소드에서 다음을 사용하여 영역을 지정할 수 있습니다.

  • add("북쪽", b1);
  • add("남쪽",b2);
  • add("동쪽",b3);
  • add("서부",b4);
  • add("가운데",b5);
  • 추가(BorderLayout.NORTH,b1);
  • 추가(BorderLayout.SOUTH,b2);
  • add(BorderLayout.EAST,b3);
  • 추가(BorderLayout.WEST,b4);
  • 추가(BorderLayout.CENTER,b5);

참고2 : 상수 이름이 표시된 것처럼 대문자가 아니면 컴파일이 실패합니다.

참고3 : 위의 조합도 가능합니다.

JLabel

JLabel은 짧은 텍스트 문자열이나 이미지 또는 둘 다에 대한 표시 영역입니다. 레이블은 입력 이벤트에 반응하지 않습니다.

프로그램:

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

클래스 S2는 JFrame{을 확장합니다.

컨테이너 c;

JTextField txt1;

J버튼 btn1;

JLabel lbl1, lbl2;

S2(){

c=getContentPane();

c.setLayout(new FlowLayout());

lbl1= new JLabel("숫자를 입력하세요");

txt1= 새 JTextField(10);

btn1= new JButton("답변");

lbl2= 새 JLabel();

c.add(lbl1);

c.add(txt1);

c.add(btn1);

c.add(lbl2);

btn1.addActionListener(new L2());

}

공개 정적 무효 메인(문자열 인수[]){

S2 frm= 새로운 S2();

frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frm.setSize(250,150);

frm.setTitle("정사각형 찾기");

frm.setVisible(참);

}

클래스 L2는 ActionListener{를 구현합니다.

공공 무효 actionPerformed(ActionEvent ae){

노력하다{

int a= Integer.ParseInt(txt1.getText());

플로트 s= a*a;

lbl2.setText(“정사각형=”+s);

}

catch(NumberFormatException e){

JOptionPane.showMessageDialog(c,"정수를 입력하세요");

txt1.setText(" ");

txt1.requestFocus();

}

}

}

}

키 보드 이벤트 처리

키보드 이벤트 처리

프로그램:

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

클래스 S7은 JFrame{을 확장합니다.

컨테이너 c;

JTextField txt1;

J버튼 btn1;

JLabel lbl1,lbl2;

S7(){

c=getContentPane();

c.setLayout(new FlowLayout());

lbl1= new JLabel("숫자를 입력하세요");

txt1= 새 JTextField(10);

btn1= new JButton("답변");

lbl2= 새 JLabel();

c.add(lbl1);

c.add(txt1);

c.add(btn1);

c.add(lbl2);

btn1.addActionListener(new L2());

btn1.addKeyListener(new L3());

}

공개 정적 무효 메인(문자열 인수[]){

S7 frm= 새로운 S7();

frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frm.setSize(250,150);

frm.setTitle("정사각형 찾기");

frm.setVisible(참);

}

L3 클래스는 KeyListener를 구현합니다.

{

공개 무효 keyPressed(KeyEvent ke)

{

if(ke.getKeyCode()==KeyEvent.VK_ENTER);

노력하다{

int a= Integer.parseInt(txt1.getText());

플로트 s= a*a;

lbl2.setText('정사각형='+s');

}

catch(NumberFormatException e){

JOptionPane.showMessageDialog(c,"정수를 입력하세요");

txt1.setText("");

txt1.requestFocus();

lbl2.setText("");

}

}

}

공개 무효 keyReleased(KeyEvent ke){}

공개 무효 keyTyped(KeyEvent ke){}

}

클래스 L2는 ActionListener{를 구현합니다.

공공 무효 actionPerformed(ActionEvent ae){

노력하다{

int a= Integer.parseInt(txt1.getText());

플로트 s=a*a;

lbl2.setText(“정사각형=”+s);

}

catch(NumberFormatExcepption e){

JOptionPane.showMessageDialog(c,"정수를 입력하세요");

txt1.setText("");

txt1.requestFocus();

lbl2.setText("");

}

}

}

}

Windows 이벤트 처리

Windows 이벤트 처리

프로그램 :

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

클래스 S8은 JFrame{을 확장합니다.

컨테이너 c;

JTextField txt1;

J버튼 btn1;

JLabel lbl1,lbl2;

S8(){

c=getContentPane();

c.setLayout(new FlowLayout());

lbl1= new JLabel("숫자를 입력하세요");

txt1= 새 JTextField(10);

btn1= new JButton("답변");

lbl2= 새 JLabel();

c.add(lbl1);

c.add(txt1);

c.add(btn1);

c.add(lbl2);

btn1.addActionListener(new L2());

btn1.addKeyLisener(new L3());

this.addWindowListener(new L4());

}

공개 정적 무효 메인(문자열 인수[]){

S8 frm= 새로운 S8();

frm.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

frm.setSize(250,150);

frm.setTitle("정사각형 찾기");

frm.setVisible(참);

}

클래스 L4는 WindowListener{를 구현합니다.

공개 무효 windowActivated(WindowEvent e){}

공개 무효 windowDeactivated(WindowEvent e){}

공개 무효 windowOpened(WindowEvent e){

JOptionPane.showMessageDialog(c,"정사각형 계산기에 오신 것을 환영합니다");

}

공개 무효 windowClosed(WindowEvent e){}

공공 무효 windowClosing(WindowEvent e){

int output= JOptionPane.showConfirmDialog(c,"종료하시겠습니까");

if(출력==JOptionPane.YES_OPTION){

System.exit(1);

}

}

공공 무효 windowIconified(WindowEvent e){}

공개 무효 windowDeiconified(WindowEvent e){}

}

클래스 L2는 ActionListener{를 구현합니다.

공공 무효 actionPerformed(ActionEvent ae){

노력하다{

int a=Integer.parseInt(txt1.getText());

플로트 s=a*a;

lbl2.setText(“정사각형=”+s);

}

catch(NumberFormatException e){

JOptionPane.showMessageDialog(c,"정수를 입력하세요");

txt1.setText("");

txt1.requestFocus();

lbl2.setText("");

}

}

}

클래스 L3은 KeyListener{를 구현합니다.

공개 무효 keyPressed(KeyEvent ke){

if(ke.getKeyCode()==KeyEvent.VK_ENTER){

노력하다{

int a= Integer.parseInt(txt1.getText());

플로트 s=a*a;

lbl2.setText(“정사각형=”+s);

}

catch(NumberFormatException e){

JOptionPane.showMessageDialog(c,"정수를 입력하세요");

txt1.setText("");

txt1.requestFocus();

lbl2.setText("");

}

}

}

공개 무효 keyReleased(KeyEvent ke){}

공개 무효 keyTyped(KeyEvent ke){}

}

}

결론

Swing은 순수한 Java로 개발되었으며 모든 플랫폼에서 동일한 모양과 느낌을 갖고 플러그형 모양과 느낌을 제공하므로 널리 사용됩니다. 이 기사가 마음에 드셨기를 바랍니다. 피드백이 있으면 알려주세요. :) ❤️