JavaGUI——Swing组件基础

一、面板组件

一个界面只可以有一个JFrame顶层容器,但是可以有多个JPanel面板组件,
而JPanel上也可以使用FlowLayout,BorderLayout,GridLayout等各种布局管理器,
这样可以组合使用达到较为复杂的布局效果。
面板组件可以设置布局模式,实现多模式布局,但默认为流式布局。
面板组件里可以添加其他组件

在这里插入图片描述
代码如下(示例):

package 面板组件;/*JPanel:面板组件,非顶层容器,默认为流式布局。
一个界面只可以有一个JFrame顶层容器,但是可以有多个JPanel面板组件,
而JPanel上也可以使用FlowLayout,BorderLayout,GridLayout等各种布局管理器,
这样可以组合使用达到较为复杂的布局效果。
面板组件可以设置布局模式,实现多模式布局,但默认为流式布局。
面板组件里可以添加其他组件。*/
import java.awt.*;        //导包
import javax.swing.*;
public class Swing_JPanel1 extends JFrame {    //继承JFrame顶层容器

    //定义组件
    JPanel jp1, jp2;        //定义面板
    JButton jb[] = new JButton[6];    //定义按钮

    public static void main(String[] args) {
        Swing_JPanel1 a = new Swing_JPanel1();    //实现界面
    }

    //构造函数
    public Swing_JPanel1() {
        //创建组件
        jp1 = new JPanel();    //创建面板
        jp2 = new JPanel();
        jb[0] = new JButton("苹果");    //创建按钮
        jb[1] = new JButton("荔枝");
        jb[2] = new JButton("葡萄");
        jb[3] = new JButton("香蕉");
        jb[4] = new JButton("草莓");
        jb[5] = new JButton("西瓜");

        //设置布局管理器(因为默认让它就是边界布局,所以不用设置)

        //添加组件,我喜欢整体到局部,也可以局部到整体
        this.add(jp1, BorderLayout.NORTH);    //把面板1添加到北部
        this.add(jb[5], BorderLayout.CENTER);    //把按钮6添加到中部
        this.add(jp2, BorderLayout.SOUTH);    //把面板2添加到南部

        jp1.add(jb[0]);        //添加面板1的按钮组件
        jp1.add(jb[1]);
        jp2.add(jb[2]);        //添加面板2的按钮组件
        jp2.add(jb[3]);
        jp2.add(jb[4]);

        //设置窗体属性
        this.setTitle("组合布局案例");        //设置窗体标题
        this.setSize(300, 200);                //设置窗体大小
        this.setLocation(200, 200);            //设置窗体初始位置
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     //这个很重要!!!设置关闭窗体后虚拟机一同关闭,不设置的
        this.setVisible(true);                //设置可以显示
    }
}

二、文本框密码框标签组件

文本框(JTextField):用于输出文本,是明文。(用户名后面的输入框)
密码框(JPasswordField):用于输入密码,输入的不是明文,而是一串符号。(密码后的输入框)
标 签(JLabel):用于显示一串字符。(文本框和密码框前的字就是标签)

在这里插入图片描述
代码如下(示例):

package 文本框密码框标签组件;
import javax.swing.*;    //导包
import java.awt.*;
public class Swing_JTextField extends JFrame {    //继承JFrame顶层容器类

    //定义组件
    JPanel jp1, jp2, jp3;    //定义面板
    JTextField jtf1;        //定义文本框
    JPasswordField jpf1;    //定义密码框
    JLabel jlb1, jlb2;        //定义标签
    JButton jb1, jb2;        //定义按钮

    public static void main(String[] args) {    //主函数
        Swing_JTextField a = new Swing_JTextField();    //显示界面

    }

    public Swing_JTextField()        //构造函数
    {
        //创建组件
        jp1 = new JPanel();    //创建三个面板
        jp2 = new JPanel();
        jp3 = new JPanel();

        jlb1 = new JLabel("用户名");    //创建两个标签
        jlb2 = new JLabel("密	  码");

        jb1 = new JButton("登录");    //创建两个按钮
        jb2 = new JButton("取消");

        jtf1 = new JTextField(10);     //创建文本框
        jpf1 = new JPasswordField(10);    //创建密码框

        //设置布局管理器
        this.setLayout(new GridLayout(3, 1));    //网格布局,3行一列

        //添加组件
        this.add(jp1);    //添加面板
        this.add(jp2);
        this.add(jp3);

        jp1.add(jlb1);    //添加面板1的标签和文本框
        jp1.add(jtf1);

        jp2.add(jlb2);    //添加面板2的标签和密码框
        jp2.add(jpf1);

        jp3.add(jb1);    //添加面板3的按钮
        jp3.add(jb2);

        //设置窗口属性
        this.setTitle("登录界面");    //创建界面标题
        this.setSize(300, 200);        //设置界面像素
        this.setLocation(500, 100);    //设置界面初始位置
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    //设置界面和虚拟机一起关闭
        this.setVisible(true);    //设置界面可显示
    }
}

三、单选框和复选框

*当我们提供用户注册界面的时候,常常会用到:
复选框组件(JCheckBox)

单选框组件(JRadioButton)

介绍两个组件:
复选框组件(JCheckBox):可以多选的选择框

单选框组件(JRadioButton):只能单选的选择框*/

在这里插入图片描述
代码如下(示例):

package 单选框和复选框;
import java.awt.*;		//导包
import javax.swing.*;
public class Swing_JCheckBox extends JFrame {	//继承JFrame顶级容器类

    //定义组件
    JPanel jp1,jp2,jp3;			//定义面板组件
    JLabel jlb1,jlb2;			//定义标签组件
    JButton jb1,jb2;			//定义按钮组件
    JCheckBox jcb1,jcb2,jcb3;	//定义多选框组件
    JRadioButton jrb1,jrb2;		//定义单选框组件
    ButtonGroup bg;				//定义按钮组(注意这个不是组件,它是个作用域,我只是把它定义在这里而已)
    public static void main(String[] args) {
        Swing_JCheckBox a=new Swing_JCheckBox();	//显示界面

    }
    public Swing_JCheckBox()
    {
        //创建组件
        jp1=new JPanel();	//创建面板
        jp2=new JPanel();
        jp3=new JPanel();
        jb1=new JButton("注册用户");		//创建按钮
        jb2=new JButton("取消注册");
        jlb1=new JLabel("你最喜欢的运动");	//创建标签
        jlb2=new JLabel("你的性别");
        jcb1=new JCheckBox("足球");			//创建复选框
        jcb2=new JCheckBox("蓝球");
        jcb3=new JCheckBox("网球");
        jrb1=new JRadioButton("男");			//创建单选框
        jrb2=new JRadioButton("女");
        bg=new ButtonGroup();				//创建按钮组

        //设置布局管理器
        this.setLayout(new GridLayout(3,1));	//三行一列网格布局

        //添加组件
        this.add(jp1);			//添加三个面板
        this.add(jp2);
        this.add(jp3);

        jp1.add(jlb1);//jlb1=new JLabel("你最喜欢的运动");			//添加面板1的组件
        jp1.add(jcb1);//jcb1=new JCheckBox("足球");			//创建复选框
        jp1.add(jcb2);// jcb2=new JCheckBox("蓝球");
        jp1.add(jcb3);  //jcb3=new JCheckBox("网球");

        jp2.add(jlb2);			//添加面板2的组件
        bg.add(jrb1);			//必须要把单选框放入按钮组作用域中才能实现单选!!!!
        bg.add(jrb2);//你的性别
        jp2.add(jrb1);//男
        jp2.add(jrb2);//女

        jp3.add(jb1);			//添加面板3的组件
        jp3.add(jb2);

        //设置窗体属性
        this.setTitle("用户注册界面");		//设置界面标题
        this.setSize(350, 150);				//设置界面像素
        this.setLocation(200, 200);			//设置界面初始位置
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	//设置虚拟机和界面一同关闭
        this.setVisible(true);				//设置界面可视化
    }
}

四、下拉框列表框滚动窗格组件

在提供用户调查几面的时候,如果选项比较多,那么就会用到:

下拉框组件(JComboBox)

列表框组件(JList)

滚动窗格组件(JScrollPane)

介绍三个组件:
下拉框组件(JComboBox):点击箭头可以显示其他信息

列表框组件(JList):可以跟列表一样显示信息

滚动窗格组件(JScrollPane):与列表框结合使用,可以滚动显示

在这里插入图片描述
代码如下(示例):

package 下拉框列表框滚动窗格组件;


import java.awt.*;		//导包
import javax.swing.*;
public class Swing_JComboBox extends JFrame{	//继承JFrame顶层容器类

    //定义组件
    JPanel jp1,jp2;		//定义面板
    JLabel jlb1,jlb2;	//定义标签
    JComboBox jcb1;		//定义下拉框
    JList jl1;			//定义列表框
    JScrollPane jsp1;	//定义滚动窗条
    public static void main(String[] args) {	//主函数
        Swing_JComboBox a=new Swing_JComboBox();

    }
    public Swing_JComboBox()	//构造函数
    {
        //创建组件
        jp1=new JPanel();		//创建面板
        jp2=new JPanel();
        jlb1=new JLabel("你的籍贯");	//创建标签
        jlb2=new JLabel("旅游景点");
        String []ct= {"北京","上海","苏州","徐州","常州"};	//创建城市
        jcb1=new JComboBox(ct);		//把城市添加到下拉框中
        String []dd= {"东方明珠","苏州园林","云龙山","故宫","嬉戏谷","杭州乐园"};	//创建经典
        jl1=new JList(dd);		//把经典添加到列表框中
        jl1.setVisibleRowCount(4);        //列表框只显示4个信息(必须要有滚动窗格连用才生效)
        jsp1=new JScrollPane(jl1);	//给列表框加一个滚动窗格//定义滚动窗条

        //设置布局管理器
        this.setLayout(new GridLayout(2,1));	//设置网格布局,2行1列

        //加入组件
        this.add(jp1);	//添加两个面板
        this.add(jp2);

        jp1.add(jlb1);	//添加面板1的组件
        jp1.add(jcb1);

        jp2.add(jlb2);	//添加面板2的组件
        jp2.add(jsp1);    //注意!!这里不添加列表框,直接添加滚动窗格!!

        //设置窗体属性
        this.setTitle("用户注册界面");		//设置界面标题
        this.setSize(300, 250);				//设置界面像素
        this.setLocation(200, 200);			//设置界面初始位置
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	//设置虚拟机和界面一同关闭
        this.setVisible(true);				//设置界面可视化
    }
}

五、多行文本框组件

文本框JTextField是单行输入,而多行文本框(JTextArea)可以实现多行输入。
*看到上部占了大部分空间,决定使用边界布局。

下部的最下部很像边界布局的SOUTH部分,在这部分中有两种组件,一种按钮组件JButton,一种下拉列表JComboBox,并且采用流式布局的右对齐。

上部采用拆分窗格将两个多行文本框放在窗格两侧
在这里插入图片描述

代码如下(示例):

import java.awt.*;			//导包
import javax.swing.*;
public class Swing_exercise2 extends JFrame {	//继承JFrame顶层框架

    //定义组件
    //上部组件
    JPanel jp1;		//定义面板
    JSplitPane jsp;	//定义拆分窗格
    JTextArea jta1;	//定义文本域
    JScrollPane jspane1;	//定义滚动窗格
    JTextArea jta2;//定义文本域
    JScrollPane jspane2;//定义滚动窗格
    //下部组件
    JPanel jp2;//定义面板
    JButton jb1,jb2;	//定义按钮
    JComboBox jcb1;		//定义下拉框

    public static void main(String[] args)  {
        Swing_exercise2 a=new Swing_exercise2();	//显示界面
    }
    public Swing_exercise2()		//构造函数
    {
        //创建组件
        //上部组件
        jp1=new JPanel();	//创建面板
        jta1=new JTextArea();	//创建多行文本框
        jta1.setLineWrap(true);	//设置多行文本框自动换行
        jspane1=new JScrollPane(jta1);	//创建滚动窗格
        jta2=new JTextArea();//创建多行文本框
        jta2.setLineWrap(true);//设置多行文本框自动换行
        jspane2=new JScrollPane(jta2);//创建滚动窗格
        jsp=new JSplitPane(JSplitPane.VERTICAL_SPLIT,jspane1,jspane2); //创建拆分窗格
        jsp.setDividerLocation(200);	//设置拆分窗格分频器初始位置
        jsp.setDividerSize(1);			//设置分频器大小
        //下部组件
        jp2=new JPanel();
        jb1=new JButton("返回");		//创建按钮
        jb2=new JButton("发送");
        String [] name= {"周卫国","白子画","陆雪琪","金正恩","本·拉登"};
        jcb1=new JComboBox(name);	//创建下拉框

        //设置布局管理
        jp1.setLayout(new BorderLayout());	//设置面板布局
        jp2.setLayout(new FlowLayout(FlowLayout.RIGHT));

        //添加组件
        jp1.add(jsp);
        jp2.add(jcb1);
        jp2.add(jb1);
        jp2.add(jb2);

        this.add(jp1,BorderLayout.CENTER);
        this.add(jp2,BorderLayout.SOUTH);

        //设置窗体实行
        this.setTitle("聊天界面");		//设置界面标题
        this.setIconImage(new ImageIcon("image/qq.gif").getImage());    //设置标题图片,就是上面的小企鹅
        this.setSize(400, 350);				//设置界面像素
        this.setLocation(200, 200);			//设置界面初始位置
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	//设置虚拟机和界面一同关闭
        this.setVisible(true);				//设置界面可视化
    }
}

六、菜单栏组件

JMenuBar name=new JMenuBar(); //创建菜单栏
JMenu name=new JMenu(""); //创建菜单
JMenuItem name=new JMenuItem(""); //创建子菜单
在这里插入图片描述
代码如下(示例):


import java.awt.*;
import javax.swing.*;
public class Swing_JMenu extends JFrame {

    //定义组件
    JMenuBar jmb;    //定义菜单栏
    JMenu jm1, jm2, jm3, jm4, jm5;    //定义菜单
    JMenu jm6, jm7, jm8, jm9;        //定义菜单中的菜单
    JMenuItem jmi1, jmi2, jmi3, jmi4, jmi5;        //定义子菜单
    JMenuItem jmi6, jmi7, jmi8, jmi9, jmi10;        //定义子菜单

    public static void main(String[] args) {
        Swing_JMenu a = new Swing_JMenu();

    }

    public Swing_JMenu() {
        //创建组件
        jmb = new JMenuBar();        //创建菜单栏
        jm1 = new JMenu("文件");    //创建菜单
        jm2 = new JMenu("编辑");
        jm3 = new JMenu("资源");
        jm4 = new JMenu("窗口");
        jm5 = new JMenu("帮助");
        jm6 = new JMenu("新建");
        jm7 = new JMenu("打开");
        jm8 = new JMenu("保存");
        jm9 = new JMenu("导入");

        jmi6 = new JMenu("测试");
        jmi7 = new JMenu("加油1");
        jmi8 = new JMenu("加232油");
        jmi9 = new JMenu("加油2");
        jmi10 = new JMenu("加油2");



        jmi1 = new JMenuItem("文档");    //创建子菜单
        jmi2 = new JMenuItem("工程");
        jmi3 = new JMenuItem("包");
        jmi4 = new JMenuItem("类");
        jmi5 = new JMenuItem("接口");

        //把子菜单添加到菜单中
        jm2.add(jmi6);
        jm2.add(jmi7);
        jm2.add(jmi8);
        jm2.add(jmi9);
        jm2.add(jmi10);

        //设置布局管理器

        //添加组件
        jm6.add(jmi1);    //把子菜单添加到菜单中
        jm6.add(jmi2);
        jm6.add(jmi3);
        jm6.add(jmi4);
        jm6.add(jmi5);

        jm1.add(jm6);    //把菜单添加到菜单中
        jm1.add(jm7);
        jm1.add(jm8);
        jm1.add(jm9);

        jmb.add(jm1);    //把菜单添加到菜单栏中
        jmb.add(jm2);
        jmb.add(jm3);
        jmb.add(jm4);
        jmb.add(jm5);

        this.add(jmb, BorderLayout.NORTH);    //把菜单栏添加到框架北部

        //设置界面属性
        this.setTitle("菜单栏案例");        //设置界面标题
        this.setSize(300, 250);                //设置界面像素
        this.setLocation(200, 200);            //设置界面初始位置
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    //设置虚拟机和界面一同关闭
        this.setVisible(true);                //设置界面可视化
    }
}

七、流式布局

按照组件的添加次序将按钮组件(当然也可以是别的组件)从左到右放置在容器中。
当到达容器的边界时,组件将放置在下一行中。FlowLayout可以以左对齐,居中对齐、以右对齐的方式排列组件。
代码如下(示例):

package GUI布局管理器;
import java.awt.*;
import javax.swing.*;
public class 流式布局FlowLayout extends JFrame{

    //定义需要的组件
    JButton jb1,jb2,jb3,jb4,jb5,jb6;

    public static void main(String[] args) {        //主函数

        流式布局FlowLayout a=new 流式布局FlowLayout();      //实现界面

    }
    public 流式布局FlowLayout()                //swing_3的构造函数
    {
        //创建组件
        jb1=new JButton("关羽");
        jb2=new JButton("张飞");
        jb3=new JButton("赵云");
        jb4=new JButton("马超");
        jb5=new JButton("黄忠");
        jb6=new JButton("魏延");

        //添加组件
        this.add(jb1);			       //流式布局是流动的,所以可以直接添加
        this.add(jb2);
        this.add(jb3);
        this.add(jb4);
        this.add(jb5);
        this.add(jb6);

        //设置布局管理器
        this.setLayout(new FlowLayout());	//如果你不设置的话,JFrame默认的是BorderLayout边界布局管理器

        //设置窗体
        this.setTitle("流式布局案例");		//设置窗体标题
        this.setSize(300, 200);				//设置窗体大小
        this.setLocation(200, 200);			//设置窗体初始位置
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	 //这个很重要!!!设置关闭窗体后虚拟机一同关闭,不设置的
        this.setVisible(true);				//设置可以显示
    }
}

八、网格布局

代码如下(示例):

package GUI布局管理器;
import javax.swing.*;        //导包
import java.awt.*;
//导包
public class 网格布局 extends JFrame{        //继承JFrame类
    int size=9;
    JButton jbs[]=new JButton[size];             //创建button数组
    public static void main(String[] args) {    //主函数

        网格布局 a= new 网格布局();        //实现界面

    }

    public void 网格布局()                //构造函数
    {
        //创建组件
        for(int i=0;i<9;i++)
        {

            jbs[i]=new JButton(String.valueOf(i));
        }

        //设置网格布局
        this.setLayout(new GridLayout(3,3));        //这里设置的是3行3列,默认是1个组件1列

        //添加组件
        for(int i=0;i<9;i++)
        {
            this.add(jbs[i]);
        }

        //设置窗体属性
        this.setTitle("网格布局案例");		//设置窗体标题
        this.setSize(300, 200);				//设置窗体大小
        this.setLocation(200, 200);			//设置窗体初始位置
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	 //这个很重要!!!设置关闭窗体后虚拟机一同关闭,不设置的
        this.setVisible(true);				//设置可以显示
    }
}

九、边界布局

概念:组件在容器(比如JFrame)中的位置和大小是由布局管理器来决定的。所以的容器都会使用一个布局管理器,通过它来自动进行组件的布局管理。
种类:Java共提供了五种布局管理器:流式布局管理器(FlowLayout)、边界布局管理器(BorderLayout)、网格布局管理器(GridLayout)、卡片布局管理器(CardLayout)、网格包布局管理器(GridBagLayout)。其中前三种是最常见的布局管理器。
边界布局介绍:
边界布局将容器简单的划分为东南西北中五个区域,中间区域最大。

JFrame窗体,JDialog对话框组件默认布局方法。
代码如下(示例):

import javax.swing.*;    //导入swing包
import java.awt.*;       //导入awt包
public class 边界布局 extends JFrame {    //在类中继承JFrame顶级容器类(容器就是用来添加组件的,可以理解为一整个界面就是一个容器)

    //定义组件
    JButton jb1, jb2, jb3, jb4, jb5;

    public static void main(String[] args) {    //主函数
        边界布局 a = new 边界布局();            //创建界面
    }

    public 边界布局()            //创建swing_2类的构造函数,在构造函数中用this调用JFrame的方法,因为继承了
    {
        //创建组件
        jb1 = new JButton("中部");
        jb2 = new JButton("北部");
        jb3 = new JButton("东部");
        jb4 = new JButton("南部");
        jb5 = new JButton("西部");

        //添加组件
        this.add(jb1, BorderLayout.CENTER);  //中      //注意!!!!必须标明添加位置才行,不然全部按中部添加!!
        this.add(jb2, BorderLayout.NORTH);//北
        this.add(jb3, BorderLayout.EAST);//东部
        this.add(jb4, BorderLayout.SOUTH);//南部
        this.add(jb5, BorderLayout.WEST);//西部

        //设置窗体
        this.setTitle("边界布局案例");    //设置窗体标题
        this.setSize(300, 200);          //设置窗体大小
        this.setLocation(200, 200);      //设置窗体初始位置
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    //这个很重要!!!设置关闭窗体后虚拟机一同关闭,不设置的话,关闭窗体虚拟机不关闭,一直占用内存。
        this.setVisible(true);           //设置可以显示
    }
}
  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Readme - SwingLabs SwingX Project - http://swingx.dev.java.net<br><br><br>SwingX is a library of components and utilities extending the Java Swing library; read more at our website, <br>http://swingx.dev.java.net, and Wiki page, http://wiki.java.net/bin/view/Javadesktop/SwingLabsSwingX<br><br><br>Getting the Latest Source<br>=========================<br><br>1) Check out the lastest code<br>Download the latest release from our CVS repository; full instructions are at<br>https://swingx.dev.java.net/servlets/ProjectSource<br><br>but you can check out using the generic account "guest", with these settings<br><br>cvs -d :pserver:guest@cvs.dev.java.net:/cvs login<br><br>followed by<br><br>cvs -d :pserver:guest@cvs.dev.java.net:/cvs checkout swingx <br><br><br>Building the Source<br>===================<br>SwingX relies on Ant and Ant build files for controlling compilation, building docs, testing, etc. You can use our Ant build scripts or use your own--some IDEs make this easy to do.<br><br>To compile from the command line, you'll need to have Apache Ant installed; see http://ant.apache.org. <br><br>IMPORTANT: our default task in Ant also runs our unit tests, which are written using jUnit. You need to have Ant be aware of jUnit *before* compiling SwingX. We can't help you with <br>this--it's an Ant configuration issue. <br><br>If jUnit is not properly configured, you may get an error like this:<br> BUILD FAILED<br> c:\swingx\nbproject\build-impl.xml:407: Following error occured while executing this line<br> c:\\swingx\nbproject\build-impl.xml:127: Could not create task or type of type: junit.<br><br> Ant could not find the task or a class this task relies upon.<br><br>Suggestions: <br>- for Ant 1.5.x and previous, make sure optional.jar is in your ANT_HOME\lib directory.<br>- for Ant 1.6.x and above, make sure ant-junit.jar is in your ANT_HOME\lib directory, and that jUnit.jar is either in that directory as well OR listed on your CLASSPATH.<br><br>You can build SwingX by going to the command line and typing<br>ant<br><br>That should be it--this will test and build swingx.jar in the dist directory. <br><br><br>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值