자바 GUI 프로그래밍

자바 GUI 프로그래밍

awt 和 swing
  • awt : 추상 창 도구 세트
    • 소속 포 :java.awt
  • 스윙 : 대체가 아닌 awt의 확장
    • Swing은 많은 클래스의 awt를 상속하므로 swing 라이브러리를 사용할 때 간접적으로 awt 라이브러리를 사용합니다.
    • 소속 포 :javax.swing
  • 구성 요소 클래스의 일반적인 메서드 :
    • String getName () 구성 요소의 이름을 가져옵니다.

    • 컨테이너 getParent () 구성 요소를 직접 포함하는 컨테이너를 가져옵니다.

    • boolean isFocusable () 구성 요소가 포커스를받을 수 있는지 확인

    • boolean isFocusOwner () 구성 요소에 포커스가 있는지 확인

    • void setEnabled (boolean b) 구성 요소 차단 여부 설정 (예 : 버튼이 false이면 회색으로 표시되고 클릭 할 수 없음)

    • boolean isEnabled () 구성 요소가 차단되었는지 확인

    • void setSize (int width, int height) 구성 요소의 크기를 설정합니다.

    • void setVisible (boolean b) 컴포넌트의 가시성 여부 설정

    • boolean isVisible () 구성 요소가 표시되는지 확인

    • void setLocation (int x, int y) 구성 요소가 표시되는 위치를 지정합니다.

      • 작은 예
public class TestFrame {
    public static void main(String[] args) {
        //通过跟进看源码和构造器
        Frame frame=new Frame("第一个窗口");
        //设置可见性
        frame.setVisible(true);
        //窗口大小
        frame.setSize(400,400);
        //背景颜色
        frame.setBackground(new Color(56, 146, 255));
        //窗口位置
        frame.setLocation(200,200);
        //设置大小固定
        frame.setResizable();
    }
}

여기에 사진 설명 삽입

GUI 작성 단계
  • 构造界面: 구성 요소 개체 구성
    • 컨테이너 객체 생성 + 컴포넌트 객체 생성 + 메소드 추가
  • 美化界面: 컨테이너 구성 요소의 합리적인 레이아웃
  • 响应界面: 인터페이스에 이벤트 처리 메커니즘 추가
  • Component 클래스에서 일반적으로 사용되는 메서드
    • Container 클래스의 일반적인 메서드 :
      • 컴포넌트 add(컴포넌트 comp)는 컨테이너에 컴포넌트를 추가합니다.
      • void remove(Component comp) 컨테이너에서 구성 요소를 제거합니다.
      • void setLayout(LayoutManager mgr) 컨테이너의 레이아웃 설정
    • Frame 클래스의 일반적인 메서드 :
      • void setTitle(String s) set title
      • 문자열 getTitle() 제목 가져 오기
    • Label 클래스 및 TextField 클래스의 일반적인 메서드 :
      void setText(String s) Set text information
      String getText() Get text information
    • Button 클래스의 일반적인 메서드 :
      • void setLabel(String s) 컴포넌트 이름이 아닌 버튼의 레이블 정보를 설정하고 버튼 이름 대신 레이블의 내용 만 설정합니다.
      • String getLabel() 버튼의 레이블 정보를 가져옵니다.
  • FlowLayout 레이아웃 클래스 : 구성 요소는 왼쪽에서 오른쪽으로, 행별로 순서대로 배치됩니다.
  • GridLayout 레이아웃 클래스 : 컨테이너를 같은 크기의 그리드로 나눕니다.
  • 글꼴 클래스 :Font f1=new Font(" 宋体" , Font.BOLD , 23);
package GUI;
import java.awt.*;
import javax.swing.*;

public class GuiPra extends JFrame{
    GuiPra(){
        super("练习");
    }
    public void f(){
        setSize(400,400);
        setBackground(Color.ORANGE);
        setLocation(300,300);
        setLayout(new FlowLayout());
        add(new Label("用户名:"));
        add(new JTextField(5));
        add(new Label("密码:"));
        add(new TextField(5));
        add(new JButton("登录"));
        add(new JButton("退出"));
        setVisible(true);
    }

    public static void main(String[] args) {
        new GuiPra().f();
    }
}

여기에 사진 설명 삽입

Label과 JLabel의 차이점에 유의하십시오. JLabel의 setBackground는 JComponent에서 상속되는 반면 JComponent의 setOpaque (boolean)는 기본적으로 false이며 배경은 투명하며 기본 픽셀을 표시 할 수 없습니다. 따라서 JLabel의 배경 설정을 사용하려면 다음을 수행하십시오. 방법을 true로 변경해야합니다.

그래픽 인터페이스를 만드는 5 단계
  • JFrame 양식 만들기
  • 양식의 크기, 위치, 배경 레이아웃 등을 설정합니다.
  • 일련의 필수 구성 요소 정의
  • add 메소드를 통해 폼에 컴포넌트 추가
  • 양식 표시 : setVisible
위임 된 이벤트 처리 모델
  • 세 가지 요소 : 이벤트 소스, 이벤트, 이벤트 핸들러 (리스너)
  • 세 단계 :
    • 이벤트 소스 및 이벤트 결정
    • 관련 이벤트의 인터페이스를 구현하는 핸들러 정의
    • 이벤트 소스와 이벤트 핸들러 연결
package Practice2;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Guipra2 extends JFrame implements ActionListener{
    private JButton bok,bexit;
    private JTextField username;
    private Label tla;
    private JPasswordField password;
    public Guipra2(){
        super("一个界面");
    }
    public void f(){
        setSize(400,400);
        setLocation(300,300);
        setBackground(Color.GRAY);
        setLayout(new FlowLayout());
        username=new JTextField(5);
        password=new JPasswordField(5);
        add(new Label("用户名:"));
        add(username);
        add(new Label("密码:"));
        add(password);
        bok=new JButton("确定");
        bexit=new JButton("退出");
        add(bok);
        add(bexit);
        add(new Label("  "));
        tla=new Label("  ");//提示信息的标签
        add(tla);
        setVisible(true);
        //GUI界面设计部分
        bexit.addActionListener(this);//建立关联
        bok.addActionListener(this);
    }
    public  void actionPerformed(ActionEvent e){
    	//发生按钮点击事件监听器必须实现与事件对应的接口AcctionListener,并且自动调用事件处理方法actionPerformed
        if (e.getSource()==bexit)
            System.exit(0);
        if (e.getActionCommand().equals("确定")){
            String KeyText=String.valueOf(password.getPassword());
            //将字符数组转换成字符串
            if(username.getText().equals("why")&&password.getPassword().equals("1234"))
                tla.setText("欢迎你");
            else
                tla.setText("用户名或者密码输入错误");
            setVisible(true);
        }
    }

    public static void main(String[] args) {
        Guipra2 g=new Guipra2();
        g.f();
    }
}


여기에 사진 설명 삽입

  • 참고 : Java 클래스 라이브러리의 각 이벤트 소스에 의해 생성 될 수있는 이벤트가 결정되고 일치하는 이벤트 리스너 인터페이스도 결정되며 리스너와의 연결을 설정하는 방법도 결정됩니다. 예를 들어, 위 예제의 JButton 객체는 ActionEvent 이벤트를 생성 할 수 있습니다. 그러면 연관을 설정하는 방법은 다음과 같습니다.addActionListener(ActionListener e)
    • 그리고 리스너 인터페이스에는 위의 예와 같이 실제로 시간 처리를 완료하는 방법 인 특정 방법이 있습니다. public void actionPerformed(ActionEvent e)
    • 양식의 닫기 조치를 실현하려면 다음을 수행하십시오.
      • WindowListener 인터페이스 구현
      • 인터페이스에서 7 개의 메소드를 다시 작성하십시오.public void WindowClosing(WindowEvent e){System.exit(0);}
창 닫기가 주도하는 어댑터 클래스
  • 리스너는 리스너 인터페이스에서 모든 추상 메소드를 구현해야하기 때문에 더 번거롭고 창 닫기는 하나의 메소드 만 사용하면되지만 7 개의 메소드를 다시 작성하면됩니다.
  • 창을 닫는 두 번째 방법
//定义一个内部类
class A extents WindowAdapter{
	public void WindowClosing(WindowEvent e){System.exit(0);}
	//在构造函数中加入下面语句
	this.addWindowListener(new A());
}
  • 양식을 닫는 세 번째 방법
    • 창 닫기는 Frame의 공통 기능이므로 JFrame은 정적 정수 EXIT_ON_CLOSE를 제공합니다.
JFrame f=new JFrame("why的界面");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
레이아웃 관리
  • 레이아웃 방법 설정 : void setLayout (LayoutManager m)
  • FlowLayout : 흐름 레이아웃
    • 기본적으로 왼쪽에서 오른쪽으로, 위에서 아래로 한 줄씩 배치됩니다.
    • LEFT (왼쪽 정렬)
    • RIGHT (오른쪽 정렬)
    • CENTER (중앙 정렬)
    • LEADING (첫 번째 정렬) : 주로 영어 문자 용
    • TRAILING (꼬리 정렬)
setLayout ( new FlowLayout( FlowLayout.RIGHT ) );
  • GridLayout : 그리드 레이아웃
setLayout(new GridLayout(3,2,5,10));//将容器等分成3 行*2 列个网格 ,每个网格只能放一个组件,且自动填满;网格水平间隙为5 ,纵向间隙为10,只能以行为序从左至右填写网格
  • BorderLayout : 테두리 레이아웃 (기본 레이아웃 관리자)
    • 용기를 동, 서, 남, 북, 중의 5 개 영역으로 나누면 각 영역은 하나의 구성 요소 만 넣을 수 있으며 자동으로 채워집니다.可将组件放到指定区域,也可缺省某些区域
add(new JButton("EAST"),BorderLayout.EAST);

추천

출처blog.csdn.net/Phoebe4/article/details/111461400