一、AWT简单介绍
AWT组件包含本地代码,与硬件平台密切相关。
Swing组件不含本地代码,可以不受硬件平台的限制。
Swing组件属于JFC,主要帮助我们建立图形用户界面。
1. 列出本地所有字体的名称等信息
GraphicsEnvironment类是抽象类,描述了Java应用程序在特定平台上可用的GraphicsDevice和Font对象的集合。
package PackageB;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
public class Fonts {
public static void printFont(Font f)
{
System.out.println("系列名称: "+f.getFamily());
System.out.println("字体外观名称: "+f.getFontName());
System.out.println("逻辑名称:"+f.getName()+"\n");
}
public static void main(String[] args)
{
GraphicsEnvironment ge;
ge=GraphicsEnvironment.getLocalGraphicsEnvironment();
Font[] fonts=ge.getAllFonts();
for(Font font:fonts)
{
printFont(font);
}
}
}
部分运行结果
2.使用JFrame创建一个简单的Hello应用程序
package PackageB;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class HelloJFrame {
public static void main(String[] args)
{
// 创建窗口实例,并设置标题
JFrame f=new JFrame("hello 系统");
//
JButton b=new JButton("进入系统");
Container c=null;
JLabel lb=new JLabel("欢迎使用本系统");
lb.setForeground(Color.BLUE);
c=f.getContentPane();
c.add(lb,BorderLayout.CENTER);
c.add(b,BorderLayout.EAST);
f.setSize(300,150);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 显示窗口
f.setVisible(true);
}
}
结果展示
3.关于窗格的简单程序
(1)MessagePanel类
package PackageB;
import java.awt.Graphics;
import javax.swing.JPanel;
public class MessagePanel extends JPanel{
//重载方法
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
g.drawString("信息窗格:",10,20);
g.drawString("重要的事说三遍:", 100, 40);
for(int i=1;i<=3;++i)
g.drawString("你是最帅的少年!", 100, 40+i*20);
}
}
(2)PanulFrame类
package PackageB;
import javax.swing.JFrame;
public class PanelFrame extends JFrame{
private static final int DEFAULT_WIDTH=500;
private static final int DEFAULT_HEIGHT=300;
public PanelFrame()
{
setTitle("消息框架(谁是最帅的少年?)");
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
MessagePanel panel=new MessagePanel();
add(panel);
//add(panel);
setVisible(true);
}
public static void main(String[] args)
{
PanelFrame frame=new PanelFrame();
frame.setVisible(true);
}
}
(3)运行结果
二、布局管理器
1.流式布局管理器
package PackageB;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class FlowJFrame {
public static void main(String[] args)
{
// 建新一个JFrame实例,标题为流式布局管理器
JFrame f=new JFrame("流式布局管理器例子");
// 得到JFrame中的contentPane对象,返回Container对象
Container c=null;
c=f.getContentPane();
// 建新流式布局管理器
// 容器的默认对齐方式是FlowLayout.CENTER
FlowLayout flowLayout=new FlowLayout();
// 修改默认对齐方式
flowLayout.setAlignment(FlowLayout.RIGHT);
// 将建立的流式布局管理器使用到C容器中
c.setLayout(flowLayout);
// 创建按钮数组,数组大小为9
JButton b[]=new JButton[9];
for(int i=0;i<9;++i)
{
b[i]=new JButton("按钮"+i);
b[i].setBackground(Color.LIGHT_GRAY);
c.add(b[i]);
}
f.setSize(500,200);
f.setVisible(true);
}
}
修改对齐方式
package PackageB;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class FlowJFrame {
public static void main(String[] args)
{
// 建新一个JFrame实例,标题为流式布局管理器
JFrame f=new JFrame("流式布局管理器例子");
// 得到JFrame中的contentPane对象,返回Container对象
Container c=null;
c=f.getContentPane();
// 建新流式布局管理器
// 容器的默认对齐方式是FlowLayout.CENTER
FlowLayout flowLayout=new FlowLayout();
// 修改默认对齐方式
flowLayout.setAlignment(FlowLayout.TRAILING);
// 将建立的流式布局管理器使用到C容器中
c.setLayout(flowLayout);
// 创建按钮数组,数组大小为9
JButton b[]=new JButton[9];
for(int i=0;i<9;++i)
{
b[i]=new JButton("按钮"+i);
b[i].setBackground(Color.LIGHT_GRAY);
c.add(b[i]);
}
f.setSize(500,200);
f.setVisible(true);
}
}
2.边界布局管理器
package PackageB;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFrame;
public class BorderJFrame {
public static void main(String[] args)
{
// 创建窗口实例,并设置标题
JFrame f=new JFrame("边界布局管理器");
Container c=null;
c=f.getContentPane();
c.setLayout(new BorderLayout());
String direction[]= {
BorderLayout.EAST,BorderLayout.WEST,
BorderLayout.NORTH,BorderLayout.SOUTH,BorderLayout.CENTER};
// 创建按钮数组
JButton b[]=new JButton[5];
for(int i=0;i<5;++i)
{
b[i]=new JButton("按钮"+i);
b[i].setBackground(Color.cyan);
c.add(b[i],direction[i]);
}
f.setSize(300,200);
f.setVisible(true);
}
}
3.网格布局管理器
package PackageB;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
public class GridJFrame {
public static void main(String[] args)
{
JFrame f=new JFrame("卡式布局管理器");
Container c=null;
c=f.getContentPane();
c.setLayout(new GridLayout(5,4));
JButton b[]=new JButton[9];
for(int i=0;i<9;++i)
{
b[i]=new JButton("按钮"+Integer.toString(i));
b[i].setBackground(Color.lightGray);
c.add(b[i]);
}
f.setSize(300, 200);
f.setVisible(true);
}
}
四、卡式布局管理器
package PackageB;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class CardFrame extends MouseAdapter{
private JFrame f;
private Container c=null;
private CardLayout card;
CardFrame()
{
f=new JFrame("卡式布局管理器");
c=f.getContentPane();
card=new CardLayout();
}
public static void main(String[] args)
{
CardFrame cf=new CardFrame();
cf.init();
}
public void init()
{
c.setLayout(card);
// 创建窗格数组
JPanel p[]=new JPanel[5];
// 创建标签数组
JLabel lb[]=new JLabel[5];
JButton b[]=new JButton[5];
for(int i=0;i<5;i++)
{
p[i]=new JPanel();
p[i].setBackground(Color.LIGHT_GRAY);
lb[i]=new JLabel("这是第"+i+"卡片");
b[i]=new JButton("按钮"+i);
p[i].add(lb[i]);
p[i].add(b[i]);
//p[i].addMouseListener(this);
b[i].addMouseListener(this);
c.add(p[i],"卡片"+i);
}
f.setSize(270, 200);
f.setVisible(true);
}
public void mouseClicked(MouseEvent e)
{
card.next(c);
}
}
三、Java事件处理
1.Triangle1类
package try_a_package;
public class Triangle1 {
private double a,b,c;
String name="三角形";
public Triangle1()
{
this(10);
}
public Triangle1(double x)
{
this(x,x,x);
}
public Triangle1(double x,double y)
{
this(x,x,y);
}
public Triangle1(double a,double b,double c)
{
this.a=a;
this.b=b;
this.c=c;
adjustName();
}
public void adjustName()
{
if(this.isTriangle())
{
double t;
if(a>b)
{
t=a;
a=b;
b=t;
}
if(a>c)
{
t=a;
a=c;
c=t;
}
if(b>c)
{
t=b;
b=c;
c=t;
}
name="三角形";
if(c*c==a*a+b*b)
{
name="直角"+name;
}
else if(a==b&&b==c)
{
name="等边"+name;
}
else if(a==b||b==c)
{
name="等腰"+name;
}
}
else
{
name="非三角形";
}
}
public boolean isTriangle()
{
if(a+b>c && a+c>b && b+c>a)
{
return true;
}
return false;
}
public double getPerimeter()
{
return a+b+c;
}
public double getArea()
{
double p,s;
p=(a+b+c)/2;
s=Math.sqrt(p*(p-a)*(p-b)*(p-c));
return s;
}
@Override
public String toString()
{
String msg=name+"a="+a+",b="+b+",c="+c;
if(isTriangle())
{
msg=msg+",周长"+this.getPerimeter()+",面积"+this.getArea();
}
return msg;
}
public static void printHeader()
{
System.out.println("图形名称\t\t边长a\t边长b\t边长c\t周长\t面积");
}
}
2.ButtonOfTriangle类
package PackageB;
import javax.swing.JButton;
public class ButtonOfTriangle extends JButton{
private AreaOfTriangle f;
public ButtonOfTriangle(String s,AreaOfTriangle f)
{
// 显示s字符串?
super(s);
this.f=f;
this.addMouseListener(new ButtonAdapterOfTriangle(f));
}
}
3.ButtonAdapterOfTriangle类
package PackageB;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JTextField;
import try_a_package.Triangle1;
public class ButtonAdapterOfTriangle extends MouseAdapter{
private AreaOfTriangle f;
public ButtonAdapterOfTriangle(AreaOfTriangle f)
{
this.f=f;
}
@Override
public void mouseClicked(MouseEvent e)
{
double a[]=new double[3];
JTextField []jt=f.jt;
try {
for(int i=0;i<3;++i)
{
a[i]=Double.valueOf(jt[i].getText().trim());
}
}catch(Exception ee)
{
f.result.setText("没有输入数据或者输入数据不合法!");
return;
}
Triangle1 t=new Triangle1(a[0],a[1],a[2]);
if(t.isTriangle())
{
f.result.setText(t.toString());
}
else
{
f.result.setText(t.toString());
}
}
}
4. AreaOfTriangle类
package PackageB;
import java.awt.Container;
import java.awt.Font;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class AreaOfTriangle {
JLabel lb=new JLabel("输入三角形的三条边长:");
JLabel result=new JLabel("面积是:");
JTextField jt[]=new JTextField[3];
private JFrame f;
private ButtonOfTriangle b=new ButtonOfTriangle("求周长与面积",this);
public AreaOfTriangle()
{
f=new JFrame();
f.setTitle("求三角形面积");
Container c=f.getContentPane();
c.setLayout(new GridLayout(3,1));
JPanel p1=new JPanel();
p1.setLayout(new GridLayout(1,12));
p1.add(lb);
for(int i=0;i<jt.length;++i)
{
jt[i]=new JTextField();
p1.add(jt[i]);
}
c.add(p1);
c.add(result);
JPanel p2=new JPanel();
p2.setLayout(new GridLayout(1,3));
p2.add(new JLabel(""));
p2.add(b);
p2.add(new JLabel(""));
c.add(p2);
f.setSize(1000,200);
setFont("楷体",18);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
public void setFont(String fontName,int size)
{
Font font=new Font(fontName,Font.PLAIN,size);
lb.setFont(font);
for(int i=0;i<jt.length;++i)
{
jt[i].setFont(font);
}
result.setFont(font);
b.setFont(font);
}
public static void main(String[] args)
{
AreaOfTriangle a=new AreaOfTriangle();
System.out.println("Success!");
}
}
5.运行结果