【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); } }
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端