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);
效果图
标签的内容是可以自己设置的
//设置标签的内容
jLabel.setText("Hello world!");
//设置标签字体
jLabel.setFont(new Font("楷体",Font.BOLD,20));
//设置前景色
jLabel.setForeground(new Color(255,0,0));
效果图
JTextField
单行文本控件,可以设置一个单行的文本文件,可以用来输入内容,例如,登录窗口输入密码
//添加单行文本控件,可以在new的时候输入一个参数,设置文本长度
JTextField jTextField = new JTextField(20);
//将控件加入容器
jPanel.add(jTextField);
效果图
也可以在建立控件的时候设置初始文本,传入两个参数,第一个是文本内容,第二个是文本框长度
JTextField jTextField = new JTextField("Hello world!",20);
效果图
JCheckBox
添加复选框控件
JCheckBox jCheckBox = new JCheckBox("同意用户协议");
jPanel.add(jCheckBox);
效果图
初始状态也可以设置为选中状态
jCheckBox.setSelected(true);
JComboBox
下拉列表控件,JComboBox是一个泛型
//添加一个下拉列表控件,设置列表内容为String类型
JComboBox <String >jComboBox = new JComboBox<>();
//添加列表内容
jComboBox.addItem("红色");
jComboBox.addItem("蓝色");
jComboBox.addItem("绿色");
jPanel.add(jComboBox);
效果图
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
例如:
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文档。