您的位置:首页 > 编程语言 > Java开发

初涉java(swing常用组件及绘图原理)

2016-09-06 20:53 393 查看

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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: