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 이벤트 처리
프로그램 :
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로 개발되었으며 모든 플랫폼에서 동일한 모양과 느낌을 갖고 플러그형 모양과 느낌을 제공하므로 널리 사용됩니다. 이 기사가 마음에 드셨기를 바랍니다. 피드백이 있으면 알려주세요. :) ❤️

![연결된 목록이란 무엇입니까? [1 부]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































