图像用户界面
使用方式:借助菜单、按钮等标准界面元素和鼠标操做,帮助用户方便的发送指令,并将运行结果以图形的方式展示给用户
经过抽象窗口工具包(AWT)来建立图形用户界面(GUI)
AWT包主要提供了三大类:
容器类
Ui组件类
帮助类
Jdk1.2之后引入新包swing,在AWT的基础上增长了不少功能java
UI组件
Java的图形用户界面最基本的组成部分是组件,且组件不能单独显示出来,必须放在单独的容器中才能够显示出来
在componen类中定义了AWT组件具备通常功能如:大小,位置控制,外形控制,组件的状态控制等
AWT支持的组件:按钮、标签、文本框、文本去、复选框、单选按钮、滚动条、表格、菜单等……数组
容器:具备的功能是组件管理和布局管理,组件管理中通常包含的方法:add(),remove(),getcomponent
Container类能够直接或间接的派生两个经常使用的容器---框架frame类,面板panel类框架
帮助类
Graphics类,布局管理类(为容器设置此类时可调用容器类中的setlayout()方法),Color类和Font类ide
容器类组件:分为顶层容器(能够独立的窗口,重要的子类是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);this
}
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);3d
布局管理器 layout manager
经常使用布局:Flowlayout(流式布局):
Flowlayout():生成一个默认的流式布局
Flowlayout(int alignment):能够设定每一行组件的对齐方式
Flowlayout(int alignment, int horz, int vert): 能够设定组件间的水平和垂直距离code
多个按钮: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添加到有须要图片的菜单选项中