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() {@Overridepublic 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)]](https://img-blog.csdnimg.cn/e33c6cbf490b41c59715978bd8cae6f0.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)]](https://img-blog.csdnimg.cn/8d615ad1062845e9adc599423feed1e9.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)]](https://img-blog.csdnimg.cn/fe48e08e9d684c54ad9acb1e1afd3c69.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)]](https://img-blog.csdnimg.cn/897722eeddbe4aaea88c58c9bb245084.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)]](https://img-blog.csdnimg.cn/ff24ad2eb8704b57944016a2906a268f.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)]](https://img-blog.csdnimg.cn/eef3b12727614ba09d60742782ebf904.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)]](https://img-blog.csdnimg.cn/c4172bded896481f927c21fa5d6e2915.png)
例如:
class Layout1 implements LayoutManager2{@Overridepublic void addLayoutComponent(Component comp, Object constraints) {}@Overridepublic Dimension maximumLayoutSize(Container target) {return null;}@Overridepublic float getLayoutAlignmentX(Container target) {return 0;}@Overridepublic float getLayoutAlignmentY(Container target) {return 0;}@Overridepublic void invalidateLayout(Container target) {}@Overridepublic void addLayoutComponent(String name, Component comp) {}@Overridepublic void removeLayoutComponent(Component comp) {}@Overridepublic Dimension preferredLayoutSize(Container parent) {return null;}@Overridepublic Dimension minimumLayoutSize(Container parent) {return null;}@Overridepublic 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文档。

















