图像用户界面 使用方式:借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便的发送指令,并将运行结果以图形的方式展现给用户 通过抽象窗口工具包(AWT)来创建图形用户界面(GUI) AWT包主要提供了三大类: 容器类 Ui组件类 帮助类 Jdk1.2以后引入新包swing,在AWT的基础上增加了很多功能

UI组件 Java的图形用户界面最基本的组成部分是组件,且组件不能单独显示出来,必须放在单独的容器中才可以显示出来 在componen类中定义了AWT组件具有一般功能如:大小,位置控制,外形控制,组件的状态控制等 AWT支持的组件:按钮、标签、文本框、文本去、复选框、单选按钮、滚动条、表格、菜单等……

容器:具有的功能是组件管理和布局管理,组件管理中一般包含的方法:add(),remove(),getcomponent Container类可以直接或间接的派生两个常用的容器---框架frame类,面板panel类

帮助类 Graphics类,布局管理类(为容器设置此类时可调用容器类中的setlayout()方法),Color类和Font类

容器类组件:分为顶层容器(可以独立的窗口,重要的子类是Frame和Dialog)和非顶层容器(必须位于窗口之内,包括Panle和scrollPane等,Panle的重要子类是Applet类)

开发GUI 第一步:导包 第二步:创建组建的对象 第三步:初始化 创建窗口:方法一:继承。

import java.awt.; import javax.swing.; public class Java extends JFrame { public Java() { this.setTitle("窗口"); this.setSize(500,500); this.setLocation(400,300); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  }

public class Test { public static void main(String[] args) { new Java(); } } }
方法二:创建子类 public void test() { JFrame frame=new JFrame(); frame.setTitle("窗口"); frame.setSize(500,500); frame.setLocation(400,300); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); lable标签 label.fontcolor, label.font, label.fontsize,label.foreground,label.sethorizontalAlignment()—对齐方式……

按钮 button private JButton button; button=new JButton("按钮"); button.setEnabled(false);

布局管理器 layout manager 常用布局:Flowlayout(流式布局): Flowlayout():生成一个默认的流式布局 Flowlayout(int alignment):可以设定每一行组件的对齐方式 Flowlayout(int alignment, int horz, int vert): 可以设定组件间的水平和垂直距离

多个按钮:private JButton btn[]=new JButton[10]; for(int i=0;i<btn.length;++i) { btn[i]=new JButton("按钮"+i); for(int i=0;i<btn.length;++i) { this.add(btn[i]); Borderlayout(边界布局): Borderlayout();生成默认的编辑布局 Borderlayout(int horz, int vert): 可以设定组件间的水平和垂直距离 setLayout(new BorderLayout()); add(btn[0],BorderLayout.EAST); add(btn[1],BorderLayout.WEST); add(btn[2],BorderLayout.NORTH); add(btn[3],BorderLayout.SOUTH); add(btn[5],BorderLayout.CENTER); Gridlayout (网格布局): Gridlayout()生成一个单列的网格布局 Gridlayout(int row,int col)生成一个有行数列数的网格布局 setLayout(new GridLayout(4,4,5,5));

    		for(int i=0;i<btn.length;++i) {
	    		this.add(btn[i]);
	    	}

Card Layout(卡片布局) Boxlayout(框布局〉 GridBagLayout(网格包布局) 空布局:给容器添加组件的时候,组件没有大小,没有位置;需要自行创建大小,并且定位位置(setBounds()--既可以设置大小也可以设置位置) 每个容器( Container对象)都有一个与它相关的缺省的布局管理器。 Appt的缺省布局是 Flowlayout, Frame的缺省布局是 Borderlayout,Panel的缺省布局是 Flowlayout。 文本框 TextField QQ登录页面代码: import java.awt.; import javax.swing.; public class Login extends JFrame{ private JLabel lname; private JLabel lpass; private JTextField tname; private JTextField tpass; private JButton login;

private void init() {
	lname=new JLabel("用户名");
	lpass=new JLabel("密    码");
	 tname=new JTextField(14);
	 tpass=new JTextField(14);
	 login=new JButton("登录");
	 this.setLayout(new FlowLayout(FlowLayout.CENTER));
	this.add(lname);
	this.add(tname);
	this.add(lpass);
	this.add(tpass);
	this.add(login);
              this.setResizable(false);
	 this.setTitle("QQ登录");
 	  this.setSize(250,150);
 	  this.setLocation(400,300);
 	  this.setVisible(true);
 	  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public Login() {
	init();
}

} public class Test { public static void main(String[] args) { new Login(); } }

获取屏幕大小:Dimension dim=getToolkit(),getscreensize(); 设置大小:定义两个整型长高,除以2,再减去添加窗体的长宽的二分之一,然后放入setlocation方法中,

关于 Textfield类的常用方法有 public String gettext () 获取文本框中的输入文本 public String getselectedtext () 获取文本框中选中的文本 public boolean iseditable () /返回文本框是否可输入 public void seteditable (boolean b) /设置文本框的状态:可输入或不可输入 public int getcolumns () /获取文本框的宽度 public void set Columns (int columns) /设置文本框的宽度 public void settext (String t) /设置文本框中的文本为t

面板 Panel面板默认的是流式布局,居中对齐 文本域(多行文本框):

滚动条 import java.awt.FlowLayout;

import javax.swing.*; public class Panel extends JFrame { private JTextArea area; private JScrollPane pane; private void init() { area=new JTextArea("多行文本框",5,10); pane=new JScrollPane(area); this.setLayout(new FlowLayout()); this.add(pane); // this.setResizable(false ); this.setTitle("QQ登录"); this.setSize(400,400); this.setLocation(960,540); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public Panel() { init(); }

       pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);

(滚动条总是可见)

多选按钮 先创建 private JCheckBox box1,box2 ; 在初始化 box1=new JCheckBox("运动"); box1=new JCheckBox("读书"); 在添加 this.add(box1); this.add(box2);

判断选没选择上(此方法复选单选都适用):box.isSelected(“t\f”)

单选按钮 先创建 private JRadioButton r1,r2 ; private ButtonGroup group;

在初始化 r1=new JRadioButton ("男"); r1=new JRadioButton ("女"); group=new ButtonGroup(); 在添加 this.add(r1); this.add(r2); group.add(r1); group.add(r2); 注:单选按钮必须放到一个按钮组中

列表框 先创建 private JList list; 初始化 list=new JList<String>(new String[] {"a","b","c"});——创建数组,内容就是列表框的内容 再添加 this.add(list);

列表框添加滚动条, pane=new JScrollPane(list); 列表框可见几项,配合滚动条使用 list.setVisibleRowCount(3); 获取选择选项: list.getSelectedIndex(); list.getSelectedIndices(); list.getSelectedValues()

下拉框 创建 private JComboBox<String> combobox;

初始化 combobox=new JComboBox<String>(new String[] {"a","b","c","d","e","f","g","h","i"}); 添加 this.add(combobox);

临时添加选项: combobox.addItem("f"); combobox.getSelectedItem(); combobox.getSelectedIndex();

滚动条: 创建 private JProgressBar bar; 初始化 bar=new JProgressBar(0,100); 可以有一个,两个,三个参数 bar.setStringPainted(true); 滚动条进度可见 bar.setValue(77); 滚动条进度值 模拟下载: for(int i=0;i<=100;++i) { try { Thread.sleep(100); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); }

	 bar.setValue(i);
 }

设置是否精确滚动条 bar.setIndeterminate(); false 精确,true不精确

菜单: 创建: private JMenuBar menubar; private JMenu menu1,menu2; private JMenuItem item1,item2,item3,item4; 初始化: menubar=new JMenuBar(); 添加菜单到菜单工具栏 menu1=new JMenu("文件"); menu2=new JMenu("编辑"); 菜单项添加到菜单中 item1=new JMenuItem("新建"); item2=new JMenuItem("关闭"); item3=new JMenuItem("复制"); item4=new JMenuItem("粘贴"); menu1.add(item1); menu1.add(item2); menu2.add(item3); menu2.add(item4); 菜单添加到工具栏中 menubar.add(menu1); menubar.add(menu2); 菜单栏添加到容器 this.setJMenuBar(menubar); add.separator方法是添加分割符 Icon icon=new ImageIcon(filename); 此方法是给菜单选项添加图片,添加方法后再将icon添加到有需要图片的菜单选项中