JLabel自动换行

本文档展示了如何在Java Swing中创建JLabel并实现文本自动换行。通过将HTML标签添加到文本中,并调整View的大小,可以确保JLabel在指定宽度内自动换行。代码示例中,多个JLabel实例根据不同的宽度设置进行换行展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<img src="https://img-blog.youkuaiyun.com/20150707012645217?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
package jlabel;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.FontMetrics;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.plaf.basic.BasicHTML;
import javax.swing.text.View;


/**
 * 测试类
 *
 */
public class TesthtmlLabel extends JFrame{
	
	private static final long serialVersionUID = 1L;

	/**
	 * 将JLabel文本按照width宽度自动换行,会改变label的preferredSize为width,高度按照内容自动计算
	 * @param width 设定的换行宽度
	 * @param label 目标JLabel
	 * @return width<=0 或label为null时,返回label
	 */
	public JLabel createJLabelWithWrapWidth(int width, JLabel label){
		if (width <= 0 || label == null){
			return label;
		}
		String text = label.getText();
		if (!text.startsWith("<html>")){
			StringBuilder strBuilder = new StringBuilder("<html>");
			strBuilder.append(text);
			strBuilder.append("</html>");
			text = strBuilder.toString();
		}
		label.setText(text);
		View labelView = BasicHTML.createHTMLView(label, label.getText());
		labelView.setSize(width, 100);
		label.setPreferredSize(new Dimension(width, (int) labelView.getMinimumSpan(View.Y_AXIS)));
	    return label;
	}
	public TesthtmlLabel(){
		
		JLabel label = new JLabel();
		label.setText("a very1 very2 very3 very4 very5 very6 very7 very8 long9 string");
		label = createJLabelWithWrapWidth(200, label);
		JLabel label1 = new JLabel();
		label1.setText("a very1 very2 very3 very4 very5 very6 very7 very8 long9 string");
		label1 = createJLabelWithWrapWidth(200, label1);
		JLabel label2 = new JLabel();
		label2.setText("a very1 very2 very3 very4 very5 very6 very7 very8 long9 string");
		label2 = createJLabelWithWrapWidth(200, label2);
		
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setTitle("超链接标签");
		this.setLayout(new FlowLayout(FlowLayout.TRAILING,50,50));
		this.add(createJLabelWithWrapWidth(200, label));
		this.add(createJLabelWithWrapWidth(180, label1));
		this.add(createJLabelWithWrapWidth(160, label2));
		this.pack();
		this.setVisible(true);
	}
	public static void main(String[] args){
		new TesthtmlLabel();
	}
	
	
}
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值