자바 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
() 제목 가져 오기
- void
- Label 클래스 및 TextField 클래스의 일반적인 메서드 :
voidsetText
(String s) Set text information
StringgetText(
) Get text information - Button 클래스의 일반적인 메서드 :
- void
setLabel
(String s) 컴포넌트 이름이 아닌 버튼의 레이블 정보를 설정하고 버튼 이름 대신 레이블의 내용 만 설정합니다. - String
getLabel
() 버튼의 레이블 정보를 가져옵니다.
- void
- Container 클래스의 일반적인 메서드 :
- 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 개 영역으로 나누면 각 영역은 하나의 구성 요소 만 넣을 수 있으며 자동으로 채워집니다.
可将组件放到指定区域,也可缺省某些区域
- 용기를 동, 서, 남, 북, 중의 5 개 영역으로 나누면 각 영역은 하나의 구성 요소 만 넣을 수 있으며 자동으로 채워집니다.
add(new JButton("EAST"),BorderLayout.EAST);