Java图形组件Swing小结
程序员文章站
2024-01-31 12:23:58
...
Java图形组件Swing小结
一、知识点小结
Swing是java中的图形组件,主要用来开发图形界面的。Swing组件有两类,一类是容器类,表示可以装载其他的组件;另一类是元素类表示不可以装载其他的组件。在javax.swing包下的容器组件有JFrame,JPanel和JMenuBar,其中窗体是最大的容器组件,即窗体上可以添加面板,但面板上不能添加窗体;同包下常用的元素组件有JLabel标签类,JButton按钮类,JTextField文本输入框类,JPasswordField密码输入框类,JComboBox下拉框类,JCheckBox复选框类,JMenuItem菜单类等。在java.awt
包下和javax.swing包下都有布局类,只要是以Layout结尾的就是布局类。布局类是要使元素组件在窗体上摆放的有一定的规则,常用的布局类有BorderLayout边框布局,FlowLayout流式布局和GridLayout网格布局等。
二、程序示例
通过Swing中基本组件的简单应用实现QQ登陆界面。
1.实例化一个窗体对象,并添加背景图标,窗体的布局方式为BorderLayout边框布局
程序代码:
package QQLogin2;
import java.awt.BorderLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class LoginUI extends JFrame{
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//实例化一个窗体对象
LoginUI lo = new LoginUI();
//调用初始化界面的方法
lo.showUI();
}
private void showUI() {
// TODO Auto-generated method stub
/*
* 设置窗体的基本属性
*/
this.setSize(390,320);//设置窗体大小
this.setTitle(" ");//设置窗体标题
this.setLocationRelativeTo(null);//窗口至于屏幕*
this.setDefaultCloseOperation(3);//设置关闭窗体是的操作
this.setResizable(false);//设置禁止改变窗体大小
this.setLayout(new BorderLayout());//// JFrame默认的布局是边框布局
//实例化一个背景图标对象
ImageIcon backgroundImage = new ImageIcon("images/QQ截图-登陆界面.png");
//实例化一个标签来显示背景图标
JLabel jlaBackground = new JLabel(backgroundImage);
// 设置JLabel组件的显示位置和大小
jlaBackground.setBounds(0, 0, backgroundImage.getIconWidth(),backgroundImage.getIconHeight());
//将jlaBackground添加到JLayeredPane的底层
this.getLayeredPane().add(jlaBackground, new Integer(Integer.MIN_VALUE));
//获取ContentPane对象
JPanel contentPane = (JPanel)this.getContentPane();
//设置ContentPane对象为透明
contentPane.setOpaque(false);
//设置窗体可见
this.setVisible(true);
}
}
运行结果如图:
2.在窗体的中,西,南,北四个方位分别添加面板,初步布局如下图:
3.给各个面板添加组件,完整代码如下:
/*
* 定义一个窗体类
*/
import java.awt.BorderLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class LoginUI extends JFrame{
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//实例化一个窗体对象
LoginUI lo = new LoginUI();
//调用初始化界面的方法
lo.showUI();
}
private void showUI() {
// TODO Auto-generated method stub
/*
* 设置窗体的基本属性
*/
this.setSize(390,320);//设置窗体大小
this.setTitle(" ");//设置窗体标题
this.setLocationRelativeTo(null);//窗口至于屏幕*
this.setDefaultCloseOperation(3);//设置关闭窗体是的操作
this.setResizable(false);//设置禁止改变窗体大小
this.setLayout(new BorderLayout());//// JFrame默认的布局是边框布局
//实例化一个背景图标对象
ImageIcon backgroundImage = new ImageIcon("images/QQ截图-登陆界面.png");
//实例化一个标签来显示背景图标
JLabel jlaBackground = new JLabel(backgroundImage);
// 设置JLabel组件的显示位置和大小
jlaBackground.setBounds(0, 0, backgroundImage.getIconWidth(),backgroundImage.getIconHeight());
//将jlaBackground添加到JLayeredPane的底层
this.getLayeredPane().add(jlaBackground, new Integer(Integer.MIN_VALUE));
//获取ContentPane对象
JPanel contentPane = (JPanel)this.getContentPane();
//设置ContentPane对象为透明
contentPane.setOpaque(false);
/*
* 给窗体添加南北西中四块面板
*/
//添加南边面板
SouthPanel sp = new SouthPanel();
this.add(sp,BorderLayout.SOUTH);
//给中间添加面板
CenterPanel cp = new CenterPanel();
this.add(cp,BorderLayout.CENTER);
//添加西边面板
WestPanel wp = new WestPanel();
this.add(wp,BorderLayout.WEST);
//添加北边面板
NorthPanel np = new NorthPanel();
this.add(np,BorderLayout.NORTH);
//设置窗体可见
this.setVisible(true);
}
}
/*
* 定义中间面板
*/
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class CenterPanel extends JPanel{
public CenterPanel(){
initUI();
}
private void initUI() {
// TODO Auto-generated method stub
//设置面板为透明
this.setOpaque(false);
//设置面板布局方式为流式布局左对齐
this.setLayout(new FlowLayout(FlowLayout.LEFT));
//实例化一个下拉框对象
JComboBox jc = new JComboBox();
jc.addItem("QQ号码/手机/邮箱");//默认显示内容
jc.setEditable(true);//设置可编辑
jc.setPreferredSize(new Dimension(185,25));//设置组件大小
//将下拉框添加到面板上
this.add(jc);
//添加"注册账号"标签
this.add(new JLabel(" 注册账号"));
//实例化一个文本输入框对象
JTextField jf = new JTextField();
jf.setPreferredSize(new Dimension(185,25));//设置文本框大小
//添加文本框到面板上
this.add(jf);
//添加"忘记密码"标签
this.add(new JLabel(" 忘记密码"));
//添加复选框
JCheckBox jc1 = new JCheckBox("记住密码");
jc1.setOpaque(false);//设置为透明
JCheckBox jc2 = new JCheckBox("自动登录");
jc2.setOpaque(false);//设置为透明
this.add(jc1);
this.add(jc2);
}
}
/*
* 定义西边面板
*/
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class WestPanel extends JPanel{
public WestPanel(){
initUI();
}
private void initUI() {
// TODO Auto-generated method stub
//设置面板透明
this.setOpaque(false);
//设置面板大小
this.setPreferredSize(new Dimension(110,0));
//设置面板为空布局
this.setLayout(new FlowLayout());
//添加按钮图标
//this.add(new JButton(new ImageIcon("images/QQ截图-图标.png")));
//添加一个图标标签
ImageIcon im = new ImageIcon("images/QQ截图-图标.png");
JLabel ja = new JLabel(im);
this.add(ja);
}
}
/*
* 定义北边面板
*/
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JPanel;
public class NorthPanel extends JPanel{
public NorthPanel(){
initUI();
}
private void initUI() {
// TODO Auto-generated method stub
//只设置面板大小和透明
this.setPreferredSize(new Dimension(0,120));
this.setOpaque(false);
}
}
/*
* 定义南边面板
*/
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class SouthPanel extends JPanel{
public SouthPanel(){
initUI();
}
private void initUI() {
// TODO Auto-generated method stub
//设置面板大小
this.setPreferredSize(new Dimension(0,50));
this.setOpaque(false);
//设置面板颜色
//添加登录按钮
JButton jb = new JButton(new ImageIcon("images/登陆按钮截图.png"));
jb.setSize(this.getWidth(), this.getHeight());
this.add(jb);//添加按钮成功
}
}
完整程序运行结果如图
程序结束。
推荐阅读