轻量级组件:Swing 重量级组件:AWT (abstract windows tookit)
GUI API包含的类可以分为三个组:组建类,容器类,辅助类。
组建类用来创建图形界面。容器类用来包含其它组件。辅助类如Graphics,color,font用来支持GUI组件。
JFrame,JApplet,JDialog和JComponet类及其子类放置在javax.swing包中,其余放在java.awt中。
框架:
import javax.swing.JFrame;
public class test
{
public static void main(String[] args)
{
JFrame frame = new JFrame("MyFrame");
frame.setSize(400,300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
JFrame() 创建一个无标题的默认框架
JFrame(title : String) 创建一个特定 标题的框架
setSize(width: int,height: int) 设置框架的大小
setLocation(x: int, y: int) 设置左上角的位置
setDefaultCloseOperation(mode: int) 指定框架关闭时的操作
setLocationRelativeTo(c: Component) 设置特定组件相关的框架位置,若值为null,那么框架屏幕居中
pack(): void 自动设置框架大小在框架中放置组建
调用frame.setVisable(true)后才会显示框架。如果没有setSize方法,那么框架大小只能显示标题栏。setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)在关闭应用程序框架后结束程序。
可以使用add方法添加组件
JButton jbtok = new JButton("OK");
frame.add(jbtok);
frame.setSize(400,300);
frame.setDefalutCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelatioveTo(null);
frame.setVisible(true);
布局管理器 LayoutManager:
java的GUI组建都放置在容器中,它们的位置是由容器的布局管理器来管理
使用setLayout(aLayoutManager)方法在容器中设置布局管理器。创建一个XLayout实例,并置于一个容器中
LayoutManager layoutManager = new XLayout();
container.setLayout(layoutManager);
三种基本布局管理器:FlowLayout,GridLayout,BorderLayout
FlowLayout:
FlowLayout是最简单的布局管理器。按照顺序从左到右将组件排列到容器中,排满一行时开始新的一行。可以使用三个常量FlowLayout.RIGHT,FlowLayout.CENTER,FlowLayout.LEFT来指定组件的对齐方式。
FlowLayout() : 创建一个默认的FlowLayout管理器
FlowLayout(alignment: int) 创建一个带对齐方式的FlowLayout管理器
FlowLayout(alignment: int,hgap: int,vgap: int) 创建一个带指定对齐方式,水平间隔和垂直间隔的FlowLayout管理器
import
javax.swing.JLabel;
import
javax.swing.JTextField;
import
javax.swing.JFrame;
import
java.awt.FlowLayout;
public
class
ShowFlowLayout
extends
JFrame
{
public
ShowFlowLayout()
{
setLayout(
new
FlowLayout(FlowLayout.
LEFT
,10,20));
add(
new
JLabel(
"First Name"
));
add(
new
JTextField(8));
add(
new
JLabel(
"MI"
));
add(
new
JTextField(1));
add(
new
JLabel(
"Last Name"
));
add(
new
JTextField(8));
}
public
static
void
main(String[] args)
{
ShowFlowLayout frame =
new
ShowFlowLayout();
frame.setTitle(
"ShowFlowLayout"
);
frame.setSize(200,200);
frame.setLocationRelativeTo(
null
);
frame.setDefaultCloseOperation(JFrame.
EXIT_ON_CLOSE
);
frame.setVisible(
true
);
}
}
使用的时候从JFrame派生出一个布局管理器类进行布局管理,然后设置各种参数
大多数GUI主类都将扩展JFrame类。
匿名Layout对象
setLayout(new FlowLayout(FlowLayout.LEFT),100,200);
等价于
FlowLayout layout = new FlowLayout(FlowLayout.LEFT,10,20);
setLayout(layout);
GridLayout:
GridLayout管理器以网格的形式管理组件。从左到右,从上到下逐层添加。
GridLayout() 创建一个默认的GridLayout管理器
GridLayout(rows: int, columns: int) 创建一个指定行数和列数的管理器
GridLayout(rows: int,columns: int,hgap: int,vgap: int)
创建一个指定行数列数水平间隔垂直间隔的管理器
import
javax.swing.JLabel;
import
javax.swing.JTextField;
import
javax.swing.JFrame;
import
java.awt.GridLayout;
public
class
ShowGridLayout
extends
JFrame
{
public
ShowGridLayout()
{
setLayout(
new
GridLayout(3,2,3,5));
add(
new
JLabel(
"First Name"
));
add(
new
JTextField(8));
add(
new
JLabel(
"MI"
));
add(
new
JTextField(1));
add(
new
JLabel(
"Last Name"
));
add(
new
JTextField(8));
}
public
static
void
main(String[] args)
{
ShowGridLayout frame =
new
ShowFlowLayout();
frame.setTitle(
"ShowGridLayout"
);
frame.setSize(200,125);
frame.setLocationRelativeTo(
null
);
frame.setDefaultCloseOperation(JFrame.
EXIT_ON_CLOSE
);
frame.setVisible(
true
);
}
}
如果改变这个框架的大小,按钮的布局保持不变
BorderLayout:
BorderLayout管理器将容器分成5个区域:东区,南区,西区,北区和中央。使用add(Component,index)方法可以将组件添加到BorderLayout中,其中index是一个常量,取值为BorderLayout.EAST,BorderLayout.SOUTH,BorderLayout.WEST,BorderLayout.NORTH,BorderLayout.CENTER.
BorderLayout() 创建一个默认的BorderLayout管理器
BorderLayout(hgap: int,vgap: int) 创建一个指定水平和垂直间隔的管理器
import
javax.swing.JButton;
import
javax.swing.JFrame;
import
java.awt.BorderLayout;
public
class
ShowBorderLayout
extends
JFrame
{
public
ShowBorderLayout()
{
setLayout(
new
BorderLayout(5,10));
add(
new
JButton(
"East"
),BorderLayout.
EAST
);
add(
new
JButton(
"South"
),BorderLayout.
SOUTH
);
add(
new
JButton(
"West"
),BorderLayout.
WEST
);
add(
new
JButton(
"North"
),BorderLayout.
NORTH
);
add(
new
JButton(
"Center"
),BorderLayout.
CENTER
);
}
public
static
void
main(String[] args)
{
ShowFlowLayout frame =
new
ShowFlowLayout();
frame.setTitle(
"ShowBorderLayout"
);
frame.setSize(200,125);
frame.setLocationRelativeTo(
null
);
frame.setDefaultCloseOperation(JFrame.
EXIT_ON_CLOSE
);
frame.setVisible(
true
);
}
}
布局管理器的属性
FlowLayout:
alignment,hgap,vgap
可以使用setAlignment,setHgap和setVgap方法来注明对齐方式,水平间隔和垂直间隔
GridLayout:
rows,columns,hgap,vgap表示行数列数,水平间隔和垂直间隔
可以setRows,setColumns,setHgap和setVgap来注明行数列数水平间隔和垂直间隔
BorderLayout:
hgap,vgap
可以用setHgap,setVgap来指定水平间隔和垂直间隔
FlowLayout flowLayout = new FlowLayout();
flowLayout.setAlignment(FlowLayout.RIGTH);
flowLayout.setHgap(10);
flowLayout.setVgap(20);
面板:
可以将一个窗口分成几个面板。面板的作用就是放置用户界面组建的字容器。
面板的swing版本是JPanel
JPanel p =new JPanel();
p.add(new JButton("OK"));
面板可以放到一个框架中或者另一个面板中
f.add(p);
Color类:
public color(int r,int g,int b);
Color color = new Color(128,100,100);
可以使用定义在java.awt.Component类中的setBackGround(Color c)和setForeground(Color c)方法来设置一个组件的背景色和前景色。
JButton jbtOK = new JButton("OK");
jbtOK.setBackground(color);
jbtOK.setForeground(new Color(100,1,1));
Font类:
public Font(String name,int style,int size);
可以从SanSerif,Serif,Monospaced,Dialog或DialogInput中选择一种字体名,可以从Font.PLAIN(0),Font.BOLD(1),Font.ITALIC(2),Font.BOLD+Font.ITALIC(3)中选择正整数的字体大小。
Font font1 = new Font("SanSerif",Font.BOLD,16);
Font font2 = new Font("Serif",Font.BOLD+Font.ITALIC,12);
JButton jbtOK = new JButton("OK");
jbtOK.setFont(font1);
toop tip:
xxx.setToolTipText("xxxxxxxxxxx");
设置组件的边界
xxx.setBorder(new TitleBorder("xxxxx"));
图像图标:
java中可以支持三种图片,GIF,JPEG,PNG。分别以.gif,.jpg,.png。
为了显示一个图像图标,首先使用new java.swing.ImageIcon(filename)来创建一个ImageIcon对象
ImageIcon icon = new ImageIcon("image/us.gif");