Java GUI 开发

Swing图形用户界面

GUI

图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面,包括窗口、菜单、按钮等各种屏幕组件。


Swing

Swing是JAVA的一个GUI工具包,是java基础类的一部分,包括了图形用户界面器件。

JFrame 窗口

JPanel 容器

JLabel 标签

JTextField 单行文本

JCheckBox 复选框

JButton 按钮

JComboBox 下拉列表


JFrame


构造方法

  • JFrame()构造一个最初不可见的新框架。
  • JFrame(String title)创建一个新的,最初不可见的 Frame与指定的标题。

可以自定义一个子类继承JFrame,根据自己的需求设计窗口

例如:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;

public class jframe {
    public static void main(String[] args) {
        JFrame myframe = new Myframe("hello");

        //关闭窗口时结束程序
        myframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myframe.setSize(400,300);//设置窗口大小
        myframe.setVisible(true);//设置窗口可视
    }
}

class Myframe extends JFrame{
    public Myframe(String title){
        super(title);
    }
}

方法

  • JFrame frame = new JFrame();
  • frame.setSize(int width,int height);//设置窗口大小;
  • frame.setVisible(boolean b);//设置窗口是否可见;
  • frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口时结束程序;
  • frame.setLocation(int x,int y);//设置窗口的位置

容器和控件


JPanel 容器,也称为面板,控件都放在JPanel中

JButton 按钮控件

class MyFrame01 extends JFrame{
    public MyFrame01(String title){
        super(title);
        //添加一个容器,用来存放控件
        JPanel jPanel = new JPanel();
        //将容器放入窗口
        this.setContentPane(jPanel);

        //定义一个按钮控件
        JButton jButton01 = new JButton("OK");
        //将控件加入容器
        jPanel.add(jButton01);

    }
}

效果图

在这里插入图片描述

设置点击按钮反应

构造一个监听器对象,通过添加一个内部类设置按钮反应,也可以使用Lambda表达式

//点击按钮反应
        jButton01.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //可以在此处添加反应
								System.out.println("**点击OK按钮**");
            }
        });
//Lambda表达式
jButton01.addActionListener((e)->{
            System.out.println("**点击OK按钮**");
        });

效果图
在这里插入图片描述

JLabel


标签控件

//添加一个标签控件
        JLabel jLabel = new JLabel("你好");
        //将控件加入容器
        jPanel.add(jLabel);

效果图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VJ998huG-1667894569758)(Swing%E5%9B%BE%E5%BD%A2%E7%94%A8%E6%88%B7%E7%95%8C%E9%9D%A2%204b5b5ccd4aed45ccba385d8535ad43b0/Untitled%202.png)]

标签的内容是可以自己设置的

//设置标签的内容
jLabel.setText("Hello world!");
//设置标签字体
jLabel.setFont(new Font("楷体",Font.BOLD,20));
//设置前景色
jLabel.setForeground(new Color(255,0,0));

效果图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2iMDT9e7-1667894569759)(Swing%E5%9B%BE%E5%BD%A2%E7%94%A8%E6%88%B7%E7%95%8C%E9%9D%A2%204b5b5ccd4aed45ccba385d8535ad43b0/Untitled%203.png)]


JTextField


单行文本控件,可以设置一个单行的文本文件,可以用来输入内容,例如,登录窗口输入密码

//添加单行文本控件,可以在new的时候输入一个参数,设置文本长度
        JTextField jTextField = new JTextField(20);
        //将控件加入容器
        jPanel.add(jTextField);

效果图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6uRzFu3f-1667894569761)(Swing%E5%9B%BE%E5%BD%A2%E7%94%A8%E6%88%B7%E7%95%8C%E9%9D%A2%204b5b5ccd4aed45ccba385d8535ad43b0/Untitled%204.png)]

也可以在建立控件的时候设置初始文本,传入两个参数,第一个是文本内容,第二个是文本框长度

  • JTextField jTextField = new JTextField("Hello world!",20);

效果图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pwVG8wbM-1667894569761)(Swing%E5%9B%BE%E5%BD%A2%E7%94%A8%E6%88%B7%E7%95%8C%E9%9D%A2%204b5b5ccd4aed45ccba385d8535ad43b0/Untitled%205.png)]


JCheckBox


添加复选框控件

JCheckBox jCheckBox = new JCheckBox("同意用户协议");
jPanel.add(jCheckBox);

效果图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s5I36qVz-1667894569762)(Swing%E5%9B%BE%E5%BD%A2%E7%94%A8%E6%88%B7%E7%95%8C%E9%9D%A2%204b5b5ccd4aed45ccba385d8535ad43b0/Untitled%206.png)]

初始状态也可以设置为选中状态

  • jCheckBox.setSelected(true);

JComboBox


下拉列表控件,JComboBox是一个泛型

//添加一个下拉列表控件,设置列表内容为String类型
JComboBox <String >jComboBox = new JComboBox<>();
//添加列表内容
jComboBox.addItem("红色");
jComboBox.addItem("蓝色");
jComboBox.addItem("绿色");
jPanel.add(jComboBox);

效果图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dwVZaCuB-1667894569763)(Swing%E5%9B%BE%E5%BD%A2%E7%94%A8%E6%88%B7%E7%95%8C%E9%9D%A2%204b5b5ccd4aed45ccba385d8535ad43b0/Untitled%207.png)]

RGB颜色


(0~255)

例如:(255,255,255)白色

(0,0,0)黑色

(255,0,0)红色

Color类表示一个颜色

new Color(255,255,255);

RGBA

A代表透明度(0~255)

public class Mycontrol extends JPanel {
    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        //控件像素大小
        int width = this.getWidth();
        int height = this.getHeight();
        //控件颜色
        g.setColor(new Color(255,0,0,125));
        g.fillRect(0,0,width,height);//控件填充
    }
}

布局器


布局器是GUI开发中很重的一个东西,可以设置控件的布局,默认条件下,布局器使用的是流式布局器,从左到右,从上到下,依次排列控件。

布局器也可以自己定义一个,根据自己的需要设置布局

定义一个类继承LayoutManager2接口,重写方法 layoutContainer(Container parent)即可实现自定义布局

坐标

左上角为(0,0)向右为x轴,向下为y

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mUhab5mR-1667894569763)(Swing%E5%9B%BE%E5%BD%A2%E7%94%A8%E6%88%B7%E7%95%8C%E9%9D%A2%204b5b5ccd4aed45ccba385d8535ad43b0/Untitled%208.png)]

例如:

class Layout1 implements LayoutManager2{

    @Override
    public void addLayoutComponent(Component comp, Object constraints) {

    }

    @Override
    public Dimension maximumLayoutSize(Container target) {
        return null;
    }

    @Override
    public float getLayoutAlignmentX(Container target) {
        return 0;
    }

    @Override
    public float getLayoutAlignmentY(Container target) {
        return 0;
    }

    @Override
    public void invalidateLayout(Container target) {

    }

    @Override
    public void addLayoutComponent(String name, Component comp) {

    }

    @Override
    public void removeLayoutComponent(Component comp) {

    }

    @Override
    public Dimension preferredLayoutSize(Container parent) {
        return null;
    }

    @Override
    public Dimension minimumLayoutSize(Container parent) {
        return null;
    }

    @Override
    public void layoutContainer(Container parent) {
				//获取窗口宽度和高度
        int height = parent.getHeight();
        int width = parent.getWidth();
				//定义一个数组接受控件
        Component []child = parent.getComponents();
        int x = 0,y = 10;
        for(int i = 0;i < child.length;i++)
        {
            Component c= child[i];
						//设置控件位置和大小
            c.setBounds(x,y,100,50);
						//设置完一个控件像素右移100像素
            x = x+101;
            if(x+100>=width)
            {
								//超过窗口宽度换行
                x = 0;
                y = y+100;
            }
        }
      
    }
}

结语

以上内容只是一些介绍,GUI开发的容器和控件还有好多方法,具体可以查看API文档。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

17丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值