Java GUI编程4---标签组件JLabel

1. 认识JLabel

JLabel组件表示的是一个标签,本身是用于显示信息的,一般情况下是不能直接更改器显示内容的。创建完的Label对象可以通过Container类中的add()方法,加入到容器中,JLabel类的常用方法和常量如下表所示。

序号常量描述
1public static final int LEFT标签文本左对齐
2public static final int CENTER标签文本居中对齐
3public static final int RIGHT标签文本右对齐
序号方法描述
1public JLabel() throws HeadlessException创建一个JLabel对象
2public JLabel(String text) throws HeadlessException创建一个标签并制定文本内容,默认左对齐
3public Label(String text,int alignment) throws HeadlessException创建一个标签并制定文本内容以及对齐方式,可以使用JLable.LEFT,JLabel.RIGHT,JLabel.CENTER这三个值
4public JLabel(String text,Icon icon,int horizontalAlignment)创建具有指定文本,图像,水平对齐方式的JLabel对象
5public JLabel(Icon image,int horizontalAlignment)创建具有制定图形和水平对齐方式的JLabel实例
6public void setText(String text)设置标签的文本
7public String getText()获取标签文本
8public void setAlignment(int alignment)设置标签的对齐方式
9public void setIcon(Icon icon)设置指定的图像

实例:使用一个标签

import java.awt.Color ;
import java.awt.Dimension;
import java.awt.Point ;
import javax.swing.JLabel ;
import javax.swing.JFrame ;
public class JLabelDemo01{
    public static void main(String args[]){
        JFrame frame = new JFrame("JLable Test") ;
        JLabel lab = new JLabel("我是一个标签",JLabel.CENTER) ;   // 实例化标签对象
        frame.add(lab) ;    // 将组件件入到面板之中
        frame.setBackground(Color.WHITE) ;//设置窗体的背景颜色

        Dimension dim = new Dimension() ;
        dim.setSize(400,200) ;              //窗体的大小
        frame.setSize(dim) ;                //设置窗体大小
        Point point = new Point(500,100) ;  // 设置坐标
        frame.setLocation(point) ;          //设置窗体坐标
        frame.setVisible(true) ;            //设置窗体可见
    }
}

运行结果:
标签中放入文本
如果要在上面的代码中体现出容器的概念,可以直接通过JFrame中的getContentPane()取得窗口的Container对象,并在此对象中加入组件。
修改后的代码如下:

import java.awt.Container;
import java.awt.Dimension;
import java.awt.Point ;
import javax.swing.JLabel ;
import javax.swing.JFrame ;
public class JLabelDemo001{
    public static void main(String args[]){
        JFrame frame = new JFrame("JLable Test") ;
        Container container=frame.getContentPane();  //取得当前窗体的容器
        JLabel lab = new JLabel("我是一个标签",JLabel.CENTER) ;   // 实例化标签对象
        container.add(lab) ;                // 将组件件入到窗体的容器中

        Dimension dim = new Dimension() ;
        dim.setSize(400,200) ;              //窗体的大小
        frame.setSize(dim) ;                //设置窗体大小
        Point point = new Point(500,100) ;  // 设置坐标
        frame.setLocation(point) ;          //设置窗体坐标
        frame.setVisible(true) ;            //设置窗体可见
    }
}

运行结果和上面的运行结果一样

2.更改JLable的文字样式

以上的标签内容只是使用了默认的字体和颜色显示,如果现在要更改使用的字体,则可以直接使用Component类中定义的一下方法:

public void setFont(Font f)

在设置是使用java.awt.Font类来表示字体,Front类常用的操作方法及常量如下表所示:

序号方法或常量类型描述
1public static final int BOLD常量文字显示为粗体
2public static final int ITALIC常量文字显示风格为斜体
3public static final int PLAIN常量文字显示风格为普通样式
4public Font(String name,int style,int size)构造方法实例化对象,指定显示风格和大小
5public String getFontName()普通成员方法得到字体的名称

实例:设置标签的显示字体,大小,背景颜色

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Point;
import javax.swing.JLabel;
import javax.swing.JFrame;
public class JLabelDemo02
{
    public static void main(String args[])
    {
        JFrame frame = new JFrame("更改JLable的文字样式");
        // 实例化标签对象,文本左对齐
        JLabel lab = new JLabel("标签中的文字", JLabel.LEFT); 
        //创建Font对象 使用Serief字体,显示风格为斜体Font.ITALIC,加粗Font.BOLD,字号大小为28
        Font fnt = new Font("Serief", Font.ITALIC + Font.BOLD, 30);
        lab.setFont(fnt);                   //设置标签中的字体
        lab.setForeground(Color.BLUE);      //设置标签中的文字颜色
        frame.add(lab);                     // 将组件件入到面板之中
        frame.getContentPane().setBackground(Color.PINK);//设置窗体背景颜色
        Dimension dim = new Dimension();    //初始化窗体大小
        dim.setSize(400, 200);
        frame.setSize(dim);                 //设置窗体大小
        Point point = new Point(500, 100);  //初始化坐标点
        frame.setLocation(point);           //设置窗体位置
        frame.setVisible(true);
    }
}

运行结果:

更改标签中的文字样式

获取本机中的全部字体

如果想取得本机的全部字体该怎么办呢?—-可以使用GraphicsEnvironment类完成
java.awt.GraphicsEnvironment可以返回本机的全部绘图设备和全部字体的集合,该类是抽象类,要想实例化对象,直接使用类中的getLocalGraphicsEnvironment()方法即可,之后通过getAvailableFontFamilyNames()方法就可取得全部的可用字体,代码如下。
实例:取得本机中的全部可用字体

import java.awt.GraphicsEnvironment;
public class GetAllFonts
{
    public static void main(String args[])
    {
        GraphicsEnvironment eq = GraphicsEnvironment.getLocalGraphicsEnvironment();
        String fontNames[] = eq.getAvailableFontFamilyNames();
        for (int x = 0; x < fontNames.length; x++)
        {
            System.out.println(fontNames[x]);
        }
    }
}

运行结果,这里太多了,只输出部分。其他的省略掉:

Agency FB
Algerian
Arial
//太多了省略...
Consolas
//太多了省略...
Times New Roman
//太多了省略...
仿宋
//太多了省略...
隶书
黑体

在JLabel中设置图片

将一个图片设置到JLabel中也是可以的,直接使用Icon接口以及ImageIcon子类即可,在ImageIcon中可以使用如下表的构造方法,将图片的数据已byte数组的形式设置到JLabel上去。

序号方法类型描述
1public ImageIcon(byte[] imageData)构造方法将保存图片信息的byte数组设置到ImageIcon中
2public ImageIcon(String filename)构造方法通过文件名称创建ImageIcon对象
3public ImageIcon(String finame,String description)构造方法设置图片路径以及图片的简单描述

下面先来看第一个构造方法的使用,如果要从一个图像文件中取得字节数组,那就要使用InputStream类来完成操作。

实例代码: 在标签上设置图像
package java1.awt.jlable;
import java.awt.Dimension;
import java.awt.Color;
import java.awt.Font;
import java.awt.Point;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.Icon;
import javax.swing.ImageIcon;
public class JLabelDemo03
{
    public static void main(String args[])
    {
        JFrame frame = new JFrame("在JLabel标签上设置图片");
        //指定图片的路径
        String picPath = "C:\\Users\\Administrator\\Desktop\\蓝精灵.jpg";
        File file = new File(picPath);              // 实例化File类的对象
        InputStream input = null;
        byte b[] = new byte[(int) file.length()];   //根据图片大小设置字节数组的长度

        try
        {
            input = new FileInputStream(file);      //实例化文件字节输入流
            input.read(b);                          //从图片中读取字节到字节数组中
            input.close();                          //关闭文件流
        } catch (Exception e)
        {
            e.printStackTrace();
        }
        Icon icon = new ImageIcon(b);               //使用字节数组,实例化ImageIcon对象
        // 实例化标签对象:带图片,居中对齐
        JLabel lab = new JLabel("带图片的标签", icon, JLabel.CENTER); 
        //设置字体,隶书,斜体,加粗,字号为28
        Font fnt = new Font("宋体", Font.ITALIC + Font.BOLD, 28);
        //设置标签中的字体
        lab.setFont(fnt);
        //这个标签中自字体的颜色
        lab.setForeground(Color.BLUE);
        //设置标签背景颜色
        lab.setOpaque(true);
        lab.setBackground(Color.PINK);
        //把标签添加到面板中
        frame.add(lab); // 将组件件入到面板之中

        // 设置窗体的背景颜色
        frame.getContentPane().setBackground(Color.WHITE);
        //设置窗口宽度和高度
        Dimension dim = new Dimension();
        dim.setSize(800,600 );
        frame.setSize(dim);
        //设置窗体的坐标
        Point point = new Point(100, 100); // 设置坐标
        frame.setLocation(point);
        frame.setVisible(true);
    }
}

运行效果:
这里写图片描述

为jlabel设置背景颜色

jlabel默认是透明的,所以默认情况下对其设置背景色是不管用的。
但是这样就可以更改其背景颜色:

jlabel.setOpaque(true);
jlabel.setbackground(color.black);

出处:https://blog.csdn.net/mr_pang/article/details/47449495
如果使用一个IO流来进行图片读取带设置JLabel显示图形太麻烦,则可以直接将一个图形的路径传递到ImageIcon的实例化中,并使用JLabel类中对应的构造方法即可。

实例:使用图像路径实例化ImageIcon

图片:

用到的图片
位置:C:\Users\Administrator\Desktop\蓝精灵_Jc.jpg;

import java.awt.Dimension;
import java.awt.Color;
import java.awt.Font;
import java.awt.Point;
import javax.swing.JLabel;
import javax.swing.JFrame;
import javax.swing.Icon;
import javax.swing.ImageIcon;
public class JLabelDemo04
{
    public static void main(String args[])
    {
        JFrame frame = new JFrame("通过图像路径实例化JLabel");
        // 指定图片路径
        String picPath = "C:\\Users\\Administrator\\Desktop\\蓝精灵_Jc.jpg";
        // 实例化ImageIcon
        Icon icon = new ImageIcon(picPath);
        // 实例化标签对象
        JLabel lab = new JLabel("通过图片路径来设置JLabel", icon, JLabel.CENTER);
        // 初始化字体
        Font fnt = new Font("Serief", Font.ITALIC + Font.BOLD, 16);
        // 标签设置字体
        lab.setFont(fnt);
        // 这种标签字体颜色
        lab.setForeground(Color.RED);
        // 设置标签背景颜色
        lab.setOpaque(true);
        lab.setBackground(Color.PINK);

        //把标签放到面板中
        frame.add(lab); 
        Dimension dim = new Dimension();
        dim.setSize(500, 300);
        frame.setSize(dim);
        Point point = new Point(100, 100); // 设置坐标
        frame.setLocation(point);
        frame.setVisible(true);
    }
}

运行结果:
运行结果

上面两种设置图片的方法都能试想效果,如果图像是从一个不确定的输入流(如数据库中读)中而来的,则使用使用第一中方法。如果图片是从文件中获取的,使用第二中方式,少了IO操作,会更加方便。

  • 114
    点赞
  • 447
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值