【Java学习笔记】41:学习用JFrame制作界面(两个界面空壳)

来源:互联网 发布:开源crm软件 编辑:程序博客网 时间:2024/04/29 21:22

前面虽然做出了那个棋盘覆盖的可视化,但是也是零散地查了很多方法,还是要系统的学习一下制作界面。

顶层容器Container是由JFrame直接获取的,然后JPanel是最重要的中间容器,其它容器往往直接嵌套给它。有些容器之间也会存在嵌套的关系,比如JRadioButton单选按钮要嵌套给ButtonGroup按钮组才能实现单选的功能。

图书录入系统

/** * @(#)StuSwing.java * * StuSwing application * * @author 刘知昊 * @version 1.00 2017/9/30 */import javax.swing.*;import java.awt.*;//写一个继承JFrame的类public class StuSwing extends JFrame{    private String[] S_book={"标准教材","升学考试","学术期刊","职业培训","兴趣读物"};//只是一个字符串数组,给JList用    private String[] S_peo={"录入员1","录入员2","录入员3"};    //在构造器里写JFrame要做的事情    public StuSwing(){    /*关于窗体*/        super("海上大学图书录入系统");//调用父类构造方法创建标题        setDefaultCloseOperation(EXIT_ON_CLOSE);//按关闭时:退出        setExtendedState(NORMAL);//扩展状态    setLocation(20,20);//位置    setSize(1000,300);//尺寸    /*关于左上角图标*/    ImageIcon ii=new ImageIcon("./flora.png");//创建ImageIcon对象    Image im=ii.getImage();//获得它的Image对象    setIconImage(im);//给继承了JFrame的StuSwing对象,这个方法也是父类的    /*初始化顶层容器Container和中间容器JPanel*/    Container con=getContentPane();//顶层容器直接从JFrame获得    JPanel jp=new JPanel();//初始化一个中间容器JPanel    /*初始化其它容器*/    JLabel jl_1=new JLabel("图书名称:");//JLabel标签    JTextField tf_1=new JTextField(20);//JTextField文本框    JLabel jl_2=new JLabel("图书编号:");//JLabel    JTextField tf_2=new JTextField(20);//JTextField    JButton jb=new JButton("录入");//JButton按钮    JTextArea ta=new JTextArea(10,75);//JTextArea文本区域    JScrollPane sp=new JScrollPane(ta);//放入JScrollPane滚动窗格中    JRadioButton rb_1=new JRadioButton("理工类");//JRadioButton单选按钮    JRadioButton rb_2=new JRadioButton("文史类",true);//JRadioButton    JRadioButton rb_3=new JRadioButton("艺术类");//JRadioButton    ButtonGroup bg=new ButtonGroup();//ButtonGroup按钮组(限制单选)    JCheckBox[] cb={new JCheckBox("旧书"),new JCheckBox("不外借"),new JCheckBox("馆际流通")};//JCheckBox单选框,这里放在了数组里    JList<String> jl=new JList<String>(S_book);//JList列表框,这里用String[]初始化    JComboBox<String> cbb=new JComboBox<String>(S_peo);//JComboBox下拉列表,这里用String[]初始化    cbb.setEditable(false);//设置它不能被编辑    /*容器嵌套:其它容器->中间容器JPanel->顶层容器Container*/    //以下容器嵌套给了ButtonGroup    bg.add(rb_1);    bg.add(rb_2);    bg.add(rb_3);    //以下容器嵌套给了JPanel    jp.add(cbb);    jp.add(sp);    jp.add(jl);    for(int i=0;i<3;i++)        jp.add(cb[i]);    jp.add(jl_1);    jp.add(tf_1);    jp.add(jl_2);    jp.add(tf_2);    jp.add(rb_1);//注意不能直接把ButtonGroup给JPanel,还是要一个一个给    jp.add(rb_2);    jp.add(rb_3);    jp.add(jb);    //最后顶层容器Container里嵌套了这个JPanel    con.add(jp);    /*设置JFrame(的子类的)可见性*/    setVisible(true);    }    //主方法中只要创建这样一个对象就行了    public static void main(String[] args) {        StuSwing sw=new StuSwing();    }}

这里写图片描述

下面这个例子要特别注意setIcon(ImageIcon…)方法可以设置某些容器外观图片化,里面传递的是一个ImageIcon对象。如果不做别的事,那么这个ImageIcon对象里图像的大小就直接被使用了,如果要改变这个大小,就要获取它的Image对象,然后用getScaledInstance获取这个Image对象的缩放版本(往往直接覆盖这个Image对象就行了),然后用这个缩放版本去还给那个ImageIcon对象,才能更改它。

登录界面

import javax.swing.*;import java.awt.*;//写一个继承JFrame的类public class StuSwing extends JFrame{    //在构造器里写JFrame要做的事情    public StuSwing(){        /*关于窗体*/        super("登录>>海上大学图书录入系统");        this.setDefaultCloseOperation(EXIT_ON_CLOSE);        this.setExtendedState(NORMAL);        this.setLocation(200,200);        this.setSize(300,250);        /*关于左上角图标*/        ImageIcon ii_1=new ImageIcon("./login.png");//创建ImageIcon对象        Image im_1=ii_1.getImage();//获得它的Image对象        this.setIconImage(im_1);//注意区分:这是设置JFrame图标的方法        /*初始化顶层容器Container和中间容器JPanel*/        Container con=this.getContentPane();        JPanel jp=new JPanel();        /*初始化其它容器*/        JLabel jl_tu=new JLabel();//这个JLabel将用来装载一张图片        ImageIcon ii_2=new ImageIcon("./tu.jpeg");//创建ImageIcon对象        Image im_2=ii_2.getImage();//获得它的Image对象        //注意!下面这句意思是获取这个Image对象的缩放版本并赋回来给它        im_2=im_2.getScaledInstance(260,150,Image.SCALE_DEFAULT);        ii_2.setImage(im_2);//更改这个Image对象后还要给ImageIcon对象        jl_tu.setIcon(ii_2);//注意区分:这是设置容器外观图片化的方法        JLabel jl_1=new JLabel("用户名");        JTextField tf=new JTextField(20);        JLabel jl_2=new JLabel("密码");        JPasswordField pf=new JPasswordField(20);//密码域        pf.setEchoChar('#');//设置密码掩护字符        /*容器嵌套:其它容器->中间容器JPanel->顶层容器Container*/        jp.add(jl_tu);        jp.add(jl_1);        jp.add(tf);        jp.add(jl_2);        jp.add(pf);        con.add(jp);        /*可见性*/        this.setVisible(true);    }    //在主方法中创建这个类的对象    public static void main(String args[]){        StuSwing sw=new StuSwing();    }}

这里写图片描述

原创粉丝点击