[关闭]
@liayun 2016-06-30T16:48:07.000000Z 字数 10319 阅读 2128

GUI(图形用户界面)

java基础


GUI(图形用户界面)

GUI

Graphical User Interface(图形用户接口),用图形的方式,来显示计算机操作的界面,这样更方便更直观。

CLI

Command line User Interface (命令行用户接口),就是常见的Dos命令行操作。需要记忆一些常用的命令,操作不直观。

Awt和Swing

Awt与Swing

Java为GUI提供的对象都存在java.Awt和javax.Swing两个包中。

继承关系图


Container:为容器,是一个特殊的组件,该组件中可以通过add方法添加其他组件进来。

布局管理器

容器中的组件的排放方式,就是布局。
常见的布局管理器:

但是最屌的布局是坐标式布局

建立一个简单的窗体

Container常用子类:Window、Panel(面板,不能单独存在。)
Window常用子类:Frame、Dialog。
简单的窗体创建过程:

事件监听机制

事件监听机制组成

事件监听机制流程图

事件监听机制中所要明确的注意点

窗体事件

了解到事件监听机制之后,Java创建图形化界面的步骤就变为:

Action事件

通过窗体事件了解到Java创建图形化界面的步骤之后,可通过以下代码了解Action事件。

鼠标事件/键盘事件

编程练习

在文本框中输入目录,点击“转到”按钮,将该目录中的文件与文件夹名称列在下面的文本区域中。如图所示:

解:

  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import java.io.*;
  4. class MyWindowDemo {
  5. private Frame f;
  6. private TextField tf;
  7. private Button but;
  8. private TextArea ta;
  9. private Dialog d;
  10. private Label lab;
  11. private Button okBut;
  12. MyWindowDemo() {
  13. init();
  14. }
  15. public void init() {
  16. f = new Frame("my window");
  17. f.setBounds(300, 100, 600, 500);
  18. f.setLayout(new FlowLayout());
  19. tf = new TextField(60);
  20. but = new Button("转到");
  21. ta = new TextArea(25, 68);
  22. /*
  23. 对话框也是一个窗体,最好不要加到Frame里面去
  24. */
  25. d = new Dialog(f, "提示信息-self", true); // true:对话框不处理掉,后面的窗体是无法操作的!!
  26. d.setBounds(400, 200, 240, 150);
  27. d.setLayout(new FlowLayout());
  28. lab = new Label();
  29. okBut = new Button("确定");
  30. d.add(lab);
  31. d.add(okBut);
  32. f.add(tf);
  33. f.add(but);
  34. f.add(ta);
  35. myEvent();
  36. f.setVisible(true);
  37. }
  38. private void myEvent() {
  39. // 点击对话框中的确定按钮,对话框也不显示出来
  40. okBut.addActionListener(new ActionListener() {
  41. public void actionPerformed(ActionEvent e) {
  42. d.setVisible(false);
  43. }
  44. });
  45. // 关闭对话框,对话框不显示
  46. d.addWindowListener(new WindowAdapter() {
  47. public void windowClosing(WindowEvent e) {
  48. d.setVisible(false);
  49. }
  50. });
  51. tf.addKeyListener(new KeyAdapter() {
  52. public void keyPressed(KeyEvent e) {
  53. if(e.getKeyCode() == KeyEvent.VK_ENTER)
  54. showDir();
  55. }
  56. });
  57. but.addActionListener(new ActionListener() {
  58. public void actionPerformed(ActionEvent e) {
  59. showDir();
  60. }
  61. });
  62. f.addWindowListener(new WindowAdapter() {
  63. public void windowClosing(WindowEvent e) {
  64. System.exit(0);
  65. }
  66. });
  67. }
  68. private void showDir() {
  69. String dirPath = tf.getText();
  70. File dir = new File(dirPath);
  71. if(dir.exists() && dir.isDirectory()) {
  72. ta.setText(""); // 首次查询时,为了防止上一次查询的信息还在,所以要清空一次。
  73. String[] names = dir.list();
  74. for(String name : names) {
  75. ta.append(name+"\r\n"); // 将给定文本追加到文本区的当前文本
  76. }
  77. } else {
  78. String info = "您输入的信息:"+dirPath+"是错误的,请重输";
  79. lab.setText(info); // 设置提示信息
  80. d.setVisible(true);
  81. }
  82. }
  83. public static void main(String[] args) {
  84. new MyWindowDemo();
  85. }
  86. }

菜单

菜单继承体系

创建菜单的步骤

一个菜单栏实例

编程练习

模仿Windows的记事本(notepad.exe)程序完成文件的打开、保存、退出的操作。如图所示:

解:

  1. package mymenu;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import java.io.*;
  5. public class MyMenuTest {
  6. private Frame f;
  7. private MenuBar bar;
  8. private TextArea ta;
  9. private Menu fileMenu;
  10. private MenuItem openItem, saveItem, closeItem;
  11. private FileDialog openDia, saveDia;
  12. private File file;
  13. MyMenuTest() {
  14. init();
  15. }
  16. public void init() {
  17. f = new Frame("my window");
  18. f.setBounds(300, 100, 650, 600);
  19. // f.setLayout(new FlowLayout()); // 默认边界布局
  20. bar = new MenuBar();
  21. ta = new TextArea();
  22. fileMenu = new Menu("文件");
  23. closeItem = new MenuItem("退出");
  24. openItem = new MenuItem("打开");
  25. saveItem = new MenuItem("保存");
  26. fileMenu.add(openItem);
  27. fileMenu.add(saveItem);
  28. fileMenu.add(closeItem); // 菜单可添加菜单项
  29. bar.add(fileMenu); // 菜单栏可添加菜单
  30. f.setMenuBar(bar);
  31. openDia = new FileDialog(f, "我要打开", FileDialog.LOAD);
  32. saveDia = new FileDialog(f, "我要保存", FileDialog.SAVE);
  33. f.add(ta);
  34. myEvent();
  35. f.setVisible(true);
  36. }
  37. private void myEvent() {
  38. saveItem.addActionListener(new ActionListener() {
  39. public void actionPerformed(ActionEvent e) {
  40. if(file == null) { // 文件不存在,弹出保存对话框。
  41. saveDia.setVisible(true);
  42. String dirPath = saveDia.getDirectory();
  43. String fileName = saveDia.getFile();
  44. if(dirPath == null || fileName == null)
  45. return;
  46. file = new File(dirPath, fileName);
  47. }
  48. // 文件已存在,写入(或修改)内容并保存。
  49. try {
  50. BufferedWriter bufw = new BufferedWriter(new FileWriter(file));
  51. String text = ta.getText();
  52. bufw.write(text);
  53. // bufw.flush();
  54. bufw.close();
  55. } catch(IOException ex) {
  56. throw new RuntimeException();
  57. }
  58. }
  59. });
  60. openItem.addActionListener(new ActionListener() {
  61. public void actionPerformed(ActionEvent e) {
  62. openDia.setVisible(true);
  63. String dirPath = openDia.getDirectory();
  64. String fileName = openDia.getFile();
  65. // System.out.println(dirPath+"..."+fileName);
  66. if(dirPath == null || fileName == null)
  67. return;
  68. ta.setText(""); // 清空
  69. File file = new File(dirPath, fileName);
  70. try {
  71. BufferedReader bufr = new BufferedReader(new FileReader(file));
  72. String line = null;
  73. while((line=bufr.readLine()) != null) {
  74. ta.append(line+"\r\n");
  75. }
  76. bufr.close();
  77. } catch(IOException ex) {
  78. throw new RuntimeException("读取失败");
  79. }
  80. }
  81. });
  82. closeItem.addActionListener(new ActionListener() {
  83. public void actionPerformed(ActionEvent e) {
  84. System.exit(0);
  85. }
  86. });
  87. f.addWindowListener(new WindowAdapter() {
  88. public void windowClosing(WindowEvent e) {
  89. System.exit(0);
  90. }
  91. });
  92. }
  93. public static void main(String[] args) {
  94. new MyMenuTest();
  95. }
  96. }

双击XXX.jar包运行

两张图即可说明:

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注