【Java - 图形界面设计】窗体 && 组件 && 事件

发布时间 2023-11-27 19:29:37作者: 沙汀鱼

窗体

窗体对象JFrame
package com.EveX.frame;

import javax.swing.*;

public class FrameTest {

    public static void main(String[] args) {
        /*创建窗体*/
        JFrame frame = new JFrame();

        /*设置窗体大小,参数宽和高,单位:像素*/
        frame.setSize(500, 500);

        /*设置窗体标题*/
        frame.setTitle("我是左上角的标题");

        /*设置窗口关闭模式:关闭窗口时终止程序*/
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        /*设置窗体可见,一定要放在最后!*/
        frame.setVisible(true);
    }

}

组件

  • 放在窗体面板中的内容(按钮、图片等)为组件

  • 添加组件步骤:

  • 注意:如果多个组件放在同一个位置,类似进栈操作,先进先出

按钮:JButton

文字、图片:JLable

组件代码
package com.EveX.frame;

import javax.swing.*;

public class FrameTest {

    public static void main(String[] args) {
        /*创建窗体*/
        JFrame frame = new JFrame();

        /*设置窗体大小,参数宽和高,单位:像素*/
        frame.setSize(500, 500);

        /*设置窗体标题*/
        frame.setTitle("我是标题");

        /*设置窗口关闭模式:关闭窗口时终止程序*/
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        /*取消组件默认布局*/
        frame.setLayout(null);

        /* JButton组件 */
        // 创建按钮组件
        JButton btn = new JButton("按钮");
        // 设置按钮位置
        btn.setBounds(50, 50, 100, 100);
        // 添加组件至窗体面板
        frame.getContentPane().add(btn);

        /* JLable组件 */
        // 创建文本
        JLabel txt = new JLabel("文本");
        txt.setBounds(50, 150, 100, 100);
        frame.getContentPane().add(txt);

        // 创建图片
        JLabel pic7 = new JLabel(new ImageIcon("/Users/evex/Projects/IDEA/image/2.png"));
        pic7.setBounds(50, 300, 100, 100);
        frame.getContentPane().add(pic7);

        /*设置窗体可见,一定要放在最后!*/
        frame.setVisible(true);
    }

}

事件


事件监听


事件冲突


btn.setFocusable(false);

事件监听代码
package com.EveX.listener;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class ListenerTest {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setSize(500, 500);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setLayout(null);

        JButton btn = new JButton("按钮");
        btn.setBounds(0, 0, 100, 100);
        frame.getContentPane().add(btn);
        
        // 取消按钮组件的焦点
        btn.setFocusable(false);
        
        /* 添加鼠标和空格监听 */
        btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("鼠标点击...");
            }
        });
        // btn.addActionListener(e -> System.out.println("鼠标点击..."));
        
        
        /* 添加键盘案件 */
        frame.addKeyListener(new KeyListener() {
            @Override
            public void keyTyped(KeyEvent e) {

            }

            @Override
            public void keyPressed(KeyEvent e) {
                int keyCode = e.getKeyCode();
                if(keyCode == 37) {
                    System.out.println("方向左键");
                } else if(keyCode == 38) {
                    System.out.println("方向上键");
                } else if(keyCode == 39) {
                    System.out.println("方向右键");
                } else if(keyCode == 40) {
                    System.out.println("方向下键");
                }
                System.out.println(keyCode);
            }

            @Override
            public void keyReleased(KeyEvent e) {

            }
        });

        frame.setVisible(true);
    }
}