目前,我们编写的程序都是基于控制台的程序GUI(Graphical User Interface)即图形用户界面,它能够使应用程序看上去更加友好
位于javax.swingSwing是纯java组件,使得应用在不同平台中有相同的外观和行为
java的图形用户界面的基本组成是组件,组件是一个以图形化的方式显示在屏幕上,并且能和用户进行交互的对象,组件不能单独的显示出来,所以必须放在一定的容器(container)中,才可以显示出来,容器可以添加多个组件,可以通过调用容器的add()方法,向容器中添加不同的组件
窗口(Frame)和面板(Panel)称为容器组件,文本输入框(JTextField),按钮(Button)称为功能组件
我们在创建一个图形用户界面时首先要创建一个窗口,通常使用 JFrame在Swing程序中创建一个窗口,在窗口中可以添加面板,通常使用 Jpanel在已经创建好的窗口中再创建面板,一个窗户口中可以创建多个面板,在面板中可以添加不同的组件,也可以设置布局,我们一般使用嵌套的方式来实现布局
创建一个窗口的演示,及常用方法:
public JFrameDemo1(){
this.setSize(500,300); //设置窗口的大小
this.setLocationRelativeTo(null); //设置窗口居中显示
this.setTitle("登录界面"); //设置窗口标题
this.setIconImage(new ImageIcon("qq微信图片_202131231028.jpg").getImage()); //设置窗口图标,需要将图片直接复制到项目下面,不能放在包中
}
public static void main(String[] args) {
JFrame jFrame = new JFrameDemo1(); //使用JFrame创建一个窗口对象
}
JLable(标签) //用来显示文字或图片
JPanel jp = new JPanel();
JtextField(文本框) //用来输入文字
JTextField accountText = new JTextField(20);
jp.add(accountText);
JPasswordField(密码框) //用来输入密码
JLabel passwordLabel = new JLabel(“密码”);
passwordLabel.setFont(new Font(“宋体”,Font.BOLD,20));
jp.add(passwordLabel);
JPasswordField jPasswordField = new JPasswordField(20);
jp.add(jPasswordField);
JTextArea(多行文本框) /用来输入多行文字
JTextArea jTextArea = new JTextArea(5,20);
//滚动面板,可出现滚动条,使多行文本框大小不发生变化
JScrollPane jScrollPane = new JScrollPane(jTextArea);
jp.add(jScrollPane);
JMenuBar(菜单栏) //用来创建一个菜单栏
JMenuBar jMenuBar = new JMenuBar();
JMenu(菜单) //用来创建一个菜单
JMenu jMenu1 = new JMenu(“文件”);
JMenu jMenu2 = new JMenu(“编辑”);
jMenuBar.add(jMenu1);
jMenuBar.add(jMenu2);
JMenuItem(菜单项) //用来创建菜单项
JMenuItem jMenuItem = new JMenuItem(“新建”);
jMenu1.add(jMenuItem);
到目前为止我们编写的只是图形用户界面,并没有特殊的功能,想要实现一定的功能必须进行事件处理
当用户与GUI组件进行交互,就会产生事件,比如: 按下一个按钮,点击鼠标等
一.事件处理思路:
一个源(事件源)产生一个事件(事件对象)并把它送到监听器那里,监听器只是简单地等待,直到它收到一个事件,一旦事件被接受,监听器将处理这些事件
一个事件源必须注册监听器以便监听器可以接受关于一个特定事件的通知
二.常用事件处理方式:
jButton1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String account = jButton1.getText();
String password = new String(jPasswordField.getPassword());
System.out.println(account);
System.out.println(password);
}
});
为鼠标添加事件监听
//添加鼠标事件:
jButton1.addMouseListener(new MouseAdapter() { //Adapter为适配器你,使用此方法,可以自己选择需要重写的事件类型,而不需要重写全部的方法
@Override
public void mouseClicked(MouseEvent e) {
System.out.println(“鼠标点击”);
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("鼠标按下");
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("鼠标释放");
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("鼠标移入");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("鼠标移出");
}
});
为键盘添加事件监听
//添加键盘事件
jTextField.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
System.out.println(“键盘输入”+e.getKeyCode());
}
@Override
public void keyPressed(KeyEvent e) {
System.out.println("键盘按下");
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("键盘释放");
}
});
为重置按钮添加事件监听
//为重置按钮添加事件监听
jButton2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
jTextField.setText(“”);
jPasswordField.setText(“”);
}
})