swing
Swing是一个用于开发Java应用程序用户界面的开发工具包。需引入包import javax.swing.*;
顶层容器
图形界面至少要有一个顶级Swing容器,顶级Swing容器为其它Swing组件在屏幕上的绘制和处理事件提供支持
常用的顶级容器:
JFrame(框架):表示主程序窗口
JDialog(对话框):每个JDialog对象表示一个对话框,对话框属于二级窗口
JApplet(小程序):在浏览器内显示一个小程序界面
一个框架包括边界、菜单栏、工具栏、状态栏,以及中间占主要部分的窗格,窗格也可以看作是一种面板,但它是框架的一个组成部分,组件不会直接放到框架上,而是放在若干个面板上,这些面板再放到窗格上用框架对象的getContentPane()函数来获得窗格,再调用窗格的add()函数放置面板
常用的几种组件
1.标签 (JLabel)
可在标签上显示文字、图象或是文字图象的组合。
//显示文字
JLabel labText=new JLabel(“文本标签”);
labText.setText("文本标签");
//显示图片
ImageIcon icon = new ImageIcon("image/greenflag20.gif");
JLabel labImage=new JLabel(icon);
labImage.setIcon(icon);
2.密码框 (JPasswordField)
用户可以向其中输入文本并加以编辑,和文本框不同的是,向密码框中输入文本时,显示的不是实际输入的文本,而是特殊的回显字符(通常是’*’)。
JPasswordField txtPwd=new JPasswrodField(20);//创建一个密码框
txtPwd.setEchoChar('#');// 设定该密码框的回显字符为'#'
char []pwd=txtPwd.getPassword();//取得密码框中的内容
3.菜单
菜单采用的是一种层次结构,最顶层是菜单栏(JMenuBar);在菜单栏中可以添加若干个菜单(JMenu),每个菜单中又可以添加若干个菜单选项(JMenuItem)、分隔线(Separator)或是菜单(称之为子菜单)。
JMemuBar menuBar=new JMenuBar();//创建一个菜单栏
//通常使用框架的setJMenuBar(JMenuBar aMenuBar)方法将菜单栏置于框架中
JMenu menuSysConfig=new JMenu("系统设置(X)");//又根据需要创建多个菜单
menuBar.add(menuSysConfig);//并加入菜单栏中
4.按钮(JButton)
button.setPreferredSize(new Dimension(30,30));//设置按钮的大小
button.setContentAreaFilled(false);//将按钮设置为透明的
// 实例化一个图标对象
ImageIcon image = new ImageIcon(icons[i]);
// 实例化按钮对象,并且设置按钮上显示图片
JButton button = new JButton(image);
//或者
button.setIcon(new ImageIcon(getClass().getResource("qq.png")));
关于按钮组件更详细的可参考http://blog.sina.com.cn/s/blog_7a00bf750101akw3.html
5.复选框(JCheckBox)
JCheckBox jcb1 = new JCheckBox("主站");// 定义一个复选框
JCheckBox jcb2 = new JCheckBox("论坛");// 定义一个复选框
JCheckBox jcb3 = new JCheckBox("博客");// 定义一个复选框
JPanel panel = new JPanel();// 定义一个面板
panel.add(this.jcb1);// 加入组件
panel.add(this.jcb2);// 加入组件
panel.add(this.jcb3);// 加入组件
更多组件详细可参考http://blog.sina.com.cn/s/blog_4171e80d01009sio.html
例子
下面贴一段代码来表述一个窗口及其按钮,输入框,布局等的实现方法,此处不再赘述
package test1;
import java.awt.*;
import javax.swing.*;
public class QqLogin extends JFrame{
//北部区域
JLabel jl1;//图片
//南部区域
JPanel jp1;
JButton jb1,jb2,jb3;
//中部区域
JTabbedPane jtp;//选项卡窗格
JPanel jp2,jp3,jp4;
JLabel jl2,jl3,jl4,jl5;
JTextField jtf;//账号框
JPasswordField jpf;//密码框
JButton jb4;//清除按钮
JCheckBox jcb1,jcb2;//隐身和记住密码
public QqLogin()
{
//创建组件
jl2=new JLabel("QQ号码",JLabel.CENTER);
jl3=new JLabel("QQ密码",JLabel.CENTER);
jl4=new JLabel("忘记密码",JLabel.CENTER);
jl4.setFont(new Font("宋体",Font.PLAIN,16));//设置字体样式
jl4.setForeground(Color.BLUE);//设置字体颜色
jl5=new JLabel("<html><a herf='www.qq.com'>申请密码保护,</a>");
jl5.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
jtf=new JTextField();
jpf=new JPasswordField();
jb4=new JButton("清除号码");
jcb1=new JCheckBox("隐身登录");
jcb2=new JCheckBox("记住密码");
jl1=new JLabel(new ImageIcon("1.gif"));//图片由自己将对应名字的图片粘贴在同一包下,为了好看我截图的QQ登录界面的图片
//jl1=new JLabel("你们好");
jp1=new JPanel();
jb1=new JButton("登录");
jb2=new JButton("取消");
jb3=new JButton("向导");
jtp=new JTabbedPane();
jp2=new JPanel();
jp3=new JPanel();
jp3.setBackground(Color.RED);
jp4=new JPanel();
jp4.setBackground(new Color(0,0,255));
//将面板添加到选项窗格上
jtp.add("QQ号码", jp2);
jtp.add("手机号码",jp3);
jtp.add("电子邮箱",jp4);
//设置布局
jp2.setLayout(new GridLayout(3,3));
//添加组件
jp1.add(jb1);
jp1.add(jb2);
jp1.add(jb3);
jp2.add(jl2);
jp2.add(jtf);
jp2.add(jb4);
jp2.add(jl3);
jp2.add(jpf);
jp2.add(jl4);
jp2.add(jcb1);
jp2.add(jcb2);
jp2.add(jl5);
this.add(jp1,BorderLayout.SOUTH);
this.add(jl1,BorderLayout.NORTH);
this.add(jtp,BorderLayout.CENTER);
//展现组件
//ImageIcon icon=new ImageIcon("qq.gif");
//this.setIconImage(icon.getImage());给窗体设置图标方法
this.setSize(480,400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new QqLogin();
}
}
运行结果图:
JPanel
JPanel是Java图形用户界面(GUI)工具包swing中的面板容器类,包含在javax.swing 包中,是一种轻量级容器,可以加入到JFrame窗体中。
首先可以定义一个MyPanel(我自己的面板)用于绘图和现实绘图的区域,根据需要重写覆盖该类中的方法,
//java绘图原理
package com.test1;
import javax.swing.*;
import java.awt.*;
public class Tanke_1 extends JFrame{
MPanel mp=null;
public static void main(String[] args) {
// TODO Auto-generated method stub
Tanke_1 tanke=new Tanke_1();
}
public Tanke_1()
{
mp=new MPanel();
this.add(mp);//将画板组件添加到JFrame容器中
this.setTitle("画板");//给窗口设置标题
this.setSize(400,300); //设置大小 按像素
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置当关闭窗口的时候保证jvm也退出
this.setVisible(true);//显示
}
}
//定义一个MyPanel(我自己的面板)用于绘图和现实绘图的区域
class MPanel extends JPanel
{
//覆盖JPanel的 paint方法
//Graphics是绘图的重要类,可以理解为一只画笔
public void paint(Graphics g)
{
//1.调用父类函数完成初始化
super.paint(g);//这句话一定不能少
//先画一个圆圈
// g.drawOval(10,10,30,30);
// g.drawLine(10, 10, 40, 40);//直线
// g.drawRect(10, 10, 40, 60);//矩形边框,最左上角的点坐标和矩形长宽
// g.setColor(Color.blue);//设置颜色
// g.fillRect(10, 10, 40, 60);//填充矩形
// 椭圆的x,y是对应矩形的最左上角的点的坐标
//在面板上画出图片
// Image im=Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("/1.jpg"));//把图片的信息加载出来
// 显示图片
// g.drawImage(im, 90, 90, 540,187,this);
//如何画出字
g.setColor(Color.red);//颜色
g.setFont(new Font("宋体",Font.BOLD,50));
g.drawString("祖国万岁", 100, 100);
}
}