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

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


}
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值