本文共 6354 字,大约阅读时间需要 21 分钟。
Java Gui
Graphics User Interface 图形用户界面(GUI) JAVA1.0中使用抽象窗口工具箱( AWT )构建GUI 在JAVA2.0中,SUN公司推出了新的用户界面库SWING SWING相对于AWT来说,功能更强大,使用更方便 SWING并没有代替AWT,他只是AWT的子类,它的使用依赖于AWTAWT(重量级组件)(过时)
java.awt 包 容器 —— 包含界面组件的容器 组件 —— 各种界面组件,允许用户交互 布局管理器 —— 定义组件的位置(常用) 图形绘制 —— 界面窗口绘制图形 字体 —— 更改字体的对象(常用) 事件 —— 用于用户交互的对象(常用)swing(轻量级组件)(常用)
java.swing 包 容器 —— 包含界面组件的容器(常用) 组件 —— 各种界面组件,允许用户交互(常用) 可改变的外观 —— 可以改变图形界面的大小(常用) 图形绘制 —— 使用Java2D绘制图形(常用)swing的优势
① 轻量型组件 ② 可改变外观大小 ③ 运行更稳定 ④ 适合MVC三层设计模式(在之后的第一次项目复习的文章中也会提到,这里只是简单地提一下) M:model(模型:存储数据及其业务的处理,数据访问层) C:control(控制:业务分发/流程转发,业务逻辑层) V:view(视图:收集/展示数据,界面层)① 先在开头静态声明所有可能用到的组件为null,并且继承JFrame(extends JFrame)
② 实例化界面窗口: frame = new JFrame(“界面名”); // 规范化是直接在开头让本类继承JFrame
③ 实例化用于整体布局的panel,例: panel1 = new JPanel(); panel1.setLayout(new GridLayout(2, 1)); // 这就是声明了一个两行一列的窗体布局
④ 完成panel1中所有组件的编码
⑤ 实例化getContentPane()将组件放入frame
例:Container content = frame.getContentPane(); // 用这个方法才能将所有组件放入frame content.setLayout(new BorderLayout()); content.add(panel1, BorderLayout.CENTER); // 将包含所有组件的panel1放入Container对象⑥ 设置frame窗体的属性,必须写的:
窗体的大小和位置(setBounds) 用户关闭按钮(setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);) 可视化窗体设置(setVisible(true); )JFrame对象为底部框架就是整体的窗体,实例化时用构造方法可以直接给窗体名 JPanel对象为存放组件的对象,当然Panel也可以放在其他Panel对象之上
JLabel —— 标签对象
JButton(“按钮名”) —— 按钮对象
JTextField(长度) —— 文本条对象
.getText() —— 获取文本域字符方法 .setText(" ") —— 重置文本框方法JPasswordField(长度) —— 密码条对象
.getPassword() —— 获取密码文本域密码方法,最后记得用String() 强制类型转化成字符串型JTextArea(“默认显示的文字”, 高度, 宽度) —— 文本框对象
.getText() —— 获取文本域字符方法 .setText(" ") —— 重置文本框方法JScrollPane —— 实现文本框滚动条的对象
JRadioButton —— 单选框对象
单选框的方法: this.radioButtonBoy = new JRadioButton(“男”, true); —— // 实例化JRadioButton对象,构造方法中可声明(“选择点的内容”,是否默认选中) this.radioButtonBoy.setOpaque(false); —— // setOpaque方法会设置选择框透明(false时),露出背景的颜色 this.radioButtonBoy = new JPanel(new FlowLayout(FlowLayout.CENTER, 30, 0)); —— // 设置单选框整体panel的长度:(FlowLayout.位置, 水平间距, 垂直间距) this.buttonGroup = new ButtonGroup(); —— // 将选择点添加进buttonGroup对象才能成为单选 this.buttonGroup.add(this.radioButtonBoy); —— // 将选择点添加进buttonGroup对象步骤 .isSelected() —— 看选择框是否被选中的方法 .setSelecte(true 或 false) —— 重置选择框方法JComboBox —— 下拉列表对象
下拉列表的方法: this.froms = new String[]{“西安”, “北京”, “上海”, “广州”}; —— // 下拉列表是用数组放入的,所以我们要将字符串声明到数组里 this.comboBoxFrom = new JComboBox(this.froms); —— // JComboBox对象的放入方法:JComboBox(this.froms); this.comboBoxFrom.setPreferredSize(new Dimension(178, 26)); —— // 用于设置下拉列表的大小:JComboBox对象的实例名.setPreferredSize(new Dimension(长度, 高度)); .getSelectedItem().toString() —— 获取下拉列表选中信息,要用强制类型转化 .setSelectedIndex(下标) —— 重置下拉列表的方法,会重置成该下标的信息Font —— 字体设置
设置字体样式的方法(setFont)—— setFont(new Font(“字体”, Font.样式, 字体大小)); 设置字体颜色的方法(setForeground)—— setForeground(Color.颜色);FlowLayout(FlowLayout.位置) —— 可以实例化FlowLayout时设置其下的组件浮动
flowLayout中的setHgap方法 —— 设置各个组件之间的水平间隙
flowLayout中的setVgap方法 —— 设置各个组件之间的垂直间隙
setHorizontalAlignment(JLabel.CENTER) —— 设置标签内容沿 X 轴的对齐方式,也就是调整文字的水平对齐方式
setVerticalAlignment(JLabel.BOTTOM) —— 设置标签内容沿 Y 轴的对齐方式,调整文字的竖直(上下的)对齐方式
setBackground(Color.颜色)方法 —— 设置组件的背景颜色
new JLabel(“标签名”, new ImageIcon(“图片位置”) ,JLabel.位置) —— 构造方法时就可以设置标签中的内容及其对齐方法还有设置图片
① FlowLayout —— 流式布局器
② BorderLayout(组件之间的宽, 组件之间的高) —— 边框布局器,但BorderLayout方法中最多只能有五个组件,多了就无法显示,呈上下长,左右矮的五个布局
③ GridLayout(行, 列) —— 行列布局器
④ BoxLayout —— Box布局管理器
用法举例:如果需要五个横着panel时需要声明一个大的竖着的box包裹住五个横着的box .createVerticalBox()创建竖着的box方法 .createHorizontalBox()创建横着的box方法 .createVerticalStrut(间距)设置和上一个box的间距⑤ GridBagLayout —— 精确布局管理器
实现精确布局管理器的步骤: 1、this.panelBody = new JPanel(new GridBagLayout()); // 实例化GridBagLayout()对象是精确布局管理器要在放入Container对象之前就写2、GridBagConstraints constraints = new GridBagConstraints();
// 实例化GridBagConstraints()对象才能将组件放入,GridBagLayout()对象只是划分了区域 3、constraints.gridx = 1; // constraints实例名.gridx是GridBagConstraints()布局的x轴 constraints.gridy = 0; // constraints实例名.gridy是GridBagConstraints()布局的y轴 // 这是给每个panel时都要写的,这是放进精确布局管理器的位置4、this.总panel.add(this.labelTitle, constraints);
// 将这个标签以constraints实例名也就是精确布局管理器放入对象再放入总的panel5、constraints.anchor = GridBagConstraints.位置;
// 这句的意思是在这之后放入的组件都靠某个方向对齐,可以用于最后的按钮布局.setTitle(“界面框名”) —— 设置界面框名方法
.setSize(界面框的宽, 界面框的高) —— 设置界面框初始的大小 .setLocation(x坐标, y坐标) —— 设置界面框初始的位置 更便捷的:.setBounds(x坐标, y坐标, 界面框的宽, 界面框的高) .setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)方法 —— 使得用户点击右上角的X时界面就会被关闭 .setVisible(true)方法 —— 设置窗体可视化,必须要有!1、消息框:JOptionPane.showMessageDialog(在哪弹出,“弹出的文字内容”);
这个消息框只能点击确认2、选择框:JOptionPane.showConfirmDialog(在哪弹出,“弹出的问题内容”);
选择框会有选项yes或no,再根据选的是yes还是no进行之后的操作3、输入框(给一个变量接住用户输入的内容):String 变量 = JOptionPane.showInputDialog(在哪弹出,“弹出的问题内容”);
模式框概念:
不能越过这个框对下面的框进行操作 非模式框概念: 可以越过这个框对下面的框进行操作① 新建一个背景类backgroundclass继承JPanel
② 在该类中实例化一个img图片 ③ 重写paintComponent设置背景的方法 ④ 方法中写: g.drawImage(this.图片实例化的名.getImage(), x从哪开始, y从哪开始, this.getWidth(), this.getHeight(), this); ⑤ 然后在需要设置背景图片的页面实例化这个backgroundclass背景类即可菜单(JMenu):
菜单是独立于ContentPane的,默认就放在界面的最上面生成菜单的步骤:
① this.menuBar = new JMenuBar(); —— // 实例化JMenuBar ② 书写菜单的功能组件,例如JMenu… ③ this.menuBar.add(this.组件名); —— // add到menubar才能在菜单栏显示出来 ④ this.setJMenuBar(this.menuBar);实例化Menu时:
实例化JMenu有复选列表的类:
实例化时可以用构造方法直接给按键名。 有复选列表的菜单列表在写完小的功能组件时要添加至大的有复选列的JMenu组件中: this.JMenu组件.add(this.小的无复选的JMenuItem组件);实例化JMenu没有复选列表的类:
实例化时也可以用构造方法直接给按键名。JMenu常用的方法:
添加热键方法:
this.菜单功能组件名.setMnemonic(‘按键’); —— // setMnemonic() 方法是设定热键,构造方法内给按键,热键是为了当没有鼠标的情况下用键盘操作所有功能的,使用方法是alt+给定按键添加快捷键方法:
this.菜单功能组件名.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_按键, InputEvent.按键_MASK)) —— // 这是设置快捷键方法添加有复选列表的功能组件之间的横线:
this.menuFile.add(new JSeparator()); —— // 必须写在两个小的功能组件添加至大的复选列表组件之间不然就显示不出来横线让这个按键变灰点不了:
this.菜单按键组件.setEnabled(false);工具栏(JToolBar):
this.toolBar = new JToolBar(“myToolbar”); —— // 可以在构造方法中就命好名,这个命名是在拖动工具栏之后才能看到的this.button组件 = new JButton(new ImageIcon("./img/1.png")); —— // JButton实例化,在构造方法中可以通过new ImageIcon(“图标位置”)设定工具栏图标,一般工具栏就是和按钮组件配合使用
this.toolBar.add(this.工具栏之中的组件); —— // 写完要放在工具栏里的组件之后记得add进toolBar
setFloatable(false); —— // 设置不能拖动工具栏的方法,默认为true可拖动
标签面板(JTabbedPane):
设计原则:每个点击标签可以切换的页面都要具有相关性this.标签组件 = JTabbedPan —— // 实例化
JTabbedPane.位置 —— // 设置标签区域的位置
this.标签组件 = add(“标签名”, panel组件名) —— // 将两个切换的panel添加进tabbedPane
相关思维导图:今天出汗不多所以多有氧了一会,400Cals结束的
转载地址:http://fnalf.baihongyu.com/