第58节:Java中的图形界面编程-GUI 本是古典 何须时尚 2021-09-17 00:40 365阅读 0赞 ![标题图][1240] > 欢迎到我的简书查看我的文集 ## 前言: ## `GUI`是图形用户界面,在`Java`中,图形用户界面我们用`GUI`表示,而`GUI`的完整英文为: `Graphical User Interface`(图形用户接口), 所谓图形用户界面就是以图形的方式来显示你计算机的操作界面, 我们计算机中操作的界面就是 我们`Java`中常说的图形用户界面, 这样的操作简单明了. `CLI`的英文为`Command Line User Interface`, 是命令行用户接口, 命令行, 这就是我们程序员常常熟悉的, 常见的`Dos`命令行操作, 这些常用命令式需要记住的, `CLI`的操作就不那么直观了. 在`Java`中`GUI`提供了对象在 `java.awt` 和 `javax.swing` 两个包中 在早年中, Java.awt为抽象窗口工具包, 英文为 `Abstract Window ToolKit`, 需要调用本地的系统方法来实现功能需求,属于重量级的控件. 而在`awt`的基础上,创建了一套图形界面系统, 从而提供了更多的组件, 而且完全是由Java实现的, 增强了移植性, 属于轻量级的控件. 有自己的显示效果, 显示自己的形状, 平台要求低了, 轻量级和体统嵌入的比较浅. > 继承关系 ![Component .png][] `Button`按钮,`Label`标签,`Checkbox`复选框,`TextComponent`文本组件,`TextArea`文本区域,`TextField`文本框. 组件里面还能放入组件,在Java中我们叫容器. `window` 窗体, `Panel` 面板 `Frame`小窗口,`Dialog`对话框,`FileDialog`文件对话框 > `GUI` 布局 `Flow` 流式布局 ![上左下右][1240 1] 扫雷的格式布局 > 布局管理 常见的布局管理器: 流式布局管理: `FlowLayout`, 是从左到右的排列, 是`Panel`默认的布局管理. 边界布局: 东南西北,中, 是`Frame`默认的布局管理 网格布局管理: `GridLayout` 卡片布局管理: `CardLayout` 网格包布局管理: `GridBagLayout` > `GUI` 简单的小窗体 `java.awt` 包含用于创建用户界面和绘制图形图像的所有类. `java.awt` 类 `Component` `java.lang.Object` `-> java.awt.Component` 所有已实现的接口: `ImageObserver, MenuContainer, Serializable` `component` 是一个具有图形表示能力的对象. ![component][] ![子类][1240 2] ![window][] `java.awt` 类 `Frame` `java.lang.Object` `-> java.awt.Component` `-> java.awt Container` `-> java.awt.Window` `-> java.awt.Frame` > 实现的接口: `ImageObserver, MenuContainer, Serializable, Accessible` > 直接已知的子类: `JFrame` `Frame`是带有标题和边框的顶层窗口. ![frame][] import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; public class FrameDemo { public static void main(String[] args) { //1,创建一个窗体。Frame Frame f = new Frame("my frame"); //2, 对窗体进行基本设置。 f.setSize(500, 400); f.setLocation(400, 200); //设置布局。 f.setLayout(new FlowLayout()); //给窗体添加组件。 Button but = new Button("my button"); //加入一个文本框组件。 TextField tf = new TextField(40); //将组件添加到窗体中。 f.add(tf); f.add(but); //1,在按钮上添加所需的监听器。 but.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("按钮被触发了....."+e); System.exit(0); } }); f.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.out.println("window closing"); System.exit(0); } @Override public void windowOpened(WindowEvent e) { System.out.println("孔雀开屏!window open"); } }); but.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if(e.getClickCount() == 2){ System.out.println("mouse double click"); } } }); tf.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { //1,如何获取录入的内容。通过键盘事件对象获取。 // char key = e.getKeyChar(); // int code = e.getKeyCode(); // System.out.println(code+"...."+KeyEvent.getKeyText(code)); // int code = e.getKeyCode(); // if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9)){ // System.out.println("必须是0-9数字"); // e.consume();//直接取消默认处理方式。 // } if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER){ System.out.println("ctrl+enter run"); } } }); //3,让窗体显示。 f.setVisible(true); System.out.println("over"); } } > 事件监听机制 1. 事件源-组件 2. 事件 - `Event` 3. 监听器 - `Listener` 4. 事件处理 > `Button` `java.awt` `classButton` `java.lang.Object` `-> java.awt.Component` `-> java.awt.Button` ![button][] > 监听事件: `addActionListener(ActionListener l)` 添加指定的动作侦听器以从此按钮接收动作事件。 ![窗口适配器][1240 3] > `MouseListener` ![mouseListener][] `public interface MouseListener extends EventListener` 用于在组件上接收“有趣”鼠标事件(按,释放,单击,输入和退出)的侦听器界面。 ![方法][1240 4] 方法的详细信息: `mouseClicked` `void mouseClicked(MouseEvent e)` 在组件上单击鼠标按钮时调用 `mousePressed` `void mousePressed(MouseEvent e)` 在组件上按下鼠标时调用 `mouseReleased` `void mouseReleased(MouseEvent e)` 在组件上释放鼠标时调用 `mouseEntered` `void mouseEntered(MouseEvent e)` 当鼠标进入组件时调用 `mouseExited` `void mouseExited(MouseEvent e)` 当鼠标退出组件时调用 ![方法摘要][1240 5] ![文本名称][1240 6] > 图形化界面的工具 ![选择][1240 7] ![选择2][2] ![选择3][3] ![选择4][4] ![选择5][5] //1,获取路径。通过文本框对象完成。 String str_dir = jTextField1.getText(); //2,将字符串路径封装成File对象。 File dir = new File(str_dir); //判断。 if(dir.exists()&&dir.isDirectory()){ //清空文本区域。 jTextArea1.setText(""); //3,获取文件名称列表。 String[] names = dir.list(); for(String name :names){ //4,将名字显示到文本区域。 jTextArea1.append(name+LINE_SEPARATOR); } } ![JFileChooser][] `public class JFileChooser extends JComponent implements Accessible` ![注意][1240 8] > 事件监听机制流程: 1. 监听器 - 将监听器注册到事件源 2. 事件源 - 组件 (外部动作) 3. 产生事件对象 - 将事件对象传给事件处理方式 > 菜单继承 ![继承][1240 9] `MenuComponent` `MenuBar,MenuItem,Menu` > 达叔小生:往后余生,唯独有你 > You and me, we are family ! > 90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通 > 简书博客: 达叔小生 > [https://www.jianshu.com/u/c785ece603d1][https_www.jianshu.com_u_c785ece603d1] ## 结语 ## * 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注 * 小礼物走一走 or 点赞 [1240]: /images/20210724/95b84d6bddf5413392144919b5609646.png [Component .png]: /images/20210724/2b864edb40e843e58ac9ae75fc1dcc1a.png [1240 1]: /images/20210724/dc5ff45c439d44039dbfc4ed29d6c172.png [component]: /images/20210724/cf2367cdd46a4ed5b440e4ff892fe987.png [1240 2]: /images/20210724/24d90930aa3044858f2fa3d065302fa1.png [window]: /images/20210724/e2f2185d256b4a1bacaa2f5c78aceb18.png [frame]: /images/20210724/72d5495d46b24b67a8473f32f2eadb76.png [button]: /images/20210724/d2dbbafa53534fc186a5b21344373d47.png [1240 3]: /images/20210724/d8dbc5914a7b420eb52456fe7d2ea7b3.png [mouseListener]: /images/20210724/c32f6d18d47641adb29ceb090d9ee741.png [1240 4]: /images/20210724/34d4959f963648529a044392c040b5e4.png [1240 5]: /images/20210724/f1847a3b31b743a0aa5a5f293088f449.png [1240 6]: /images/20210724/80120d49d4114a7e8ba47625054be3ec.png [1240 7]: /images/20210724/493a2a8be6d84ac8aa420c8e356dd0ce.png [2]: /images/20210724/52109914fb414bc787208fce53947868.png [3]: /images/20210724/e9042730a3a440fc95fce94f402c3b74.png [4]: /images/20210724/de08b5732dcd43269e4e222b576fde03.png [5]: /images/20210724/5d1a37e7a35a496d8c3f41512c5dc982.png [JFileChooser]: /images/20210724/21e1d2dc495e49429f76f1bc54ebcf20.png [1240 8]: /images/20210724/0911bde1019c4de29e0e3aa9f3abaf2a.png [1240 9]: /images/20210724/82f1e2e479a5400ca0e3c2e032be3f9e.png [https_www.jianshu.com_u_c785ece603d1]: https://www.jianshu.com/u/c785ece603d1
还没有评论,来说两句吧...