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

窗体

窗体对象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.*;

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) {

            }
        });

        /* 适配器设计模式:
           使用接口KeyListener的键盘适配器KeyAdapter作为匿名内部类
           从而实现只重写一个需要的抽象方法的目的
        */
        frame.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                int keyCode = e.getKeyCode();
                System.out.println(keyCode);
            }
        });

        frame.setVisible(true);
    }
}

posted @ 2023-11-27 19:25  沙汀鱼  阅读(90)  评论(0编辑  收藏  举报