⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multilinelabel.java

📁 打印管理程序,测试完全通过.windows开发环境.
💻 JAVA
字号:
package jp.co.ntl.swing.ext;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;

import javax.swing.JComponent;

public class MultiLineLabel extends JComponent {
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public static final int		CENTER	= 0;
	public static final int		LEFT	= 1;
	public static final int		RIGHT	= 2;

	private int					align;
    private Font					pFont;
    private Color					fg;
    private String[]				mes;
    private static final int		offset = 5;

    public MultiLineLabel(String message, Font pFont, Color fg, Color bg, int align) {
    	commonConstractor(message, pFont, fg, bg, align);
    }
    
    public void commonConstractor(String message, Font pFont, Color fg, Color bg, int align) {
    	if (pFont != null) {
    		this.pFont = pFont;
    	} else {
    		this.pFont = new Font("SansSerif", Font.PLAIN, 12);
    	}
    	this.fg = fg;

    	if (fg != null) {
    		setForeground(fg);
    	} else {
    		fg = getForeground();
    	}
    	if (bg != null) {
    		setBackground(bg);
    	}
    	
    	setText(message);
    }
    
    public void setText(String message) {
    	int	i, j = 0, begin = 0;
    	
        // 夵峴偺屄悢傪悢偊傞
    	int		msgn = 0;
        for (i = 0; i < message.length(); i++) {
        	if (message.charAt(i) == '\n') {
        		msgn++;
        	}
        }
        msgn++;
	   	mes = new String[msgn];

    	if (msgn > 0) {
	 		for (i = 0; i < message.length(); i++) {
 				if (message.charAt(i) == '\n') {
					mes[j] = message.substring(begin, i);
 					j++;
 					begin = i + 1;
 				}
 			}

 			if (begin <= message.length()) {
 				mes[j] = message.substring(begin, message.length());
 			}
 		} else {
 			mes[0] = message;
 		}

    	repaint();
    }
    
    public void update(Graphics g)
    {
    	paint(g);
    }
    
    public void paint(Graphics g)
    {
    	g.setFont(pFont);
	   	g.setColor(fg);
		FontMetrics fm = getFontMetrics(pFont);
 		
 		for (int i = 0; i < mes.length; i++) {
 			int	x = 0;
 			switch (align) {
 			case CENTER:
 				x = (getSize().width - fm.stringWidth(mes[i])) / 2;
 				break;
 			case RIGHT:
 				x = getSize().width - fm.stringWidth(mes[i]);
 				break;
 			}
 			int	y = (i + 1) * (fm.getHeight());
	 		g.drawString(mes[i], x + offset, y + offset);
	 	}
    }

	public Dimension getPreferredSize()
	{
		FontMetrics fm = getFontMetrics(pFont);
		int[] len = new int[mes.length];
		int	i = 0;

		for (i = 0; i < mes.length; i++) {
			switch (align) {
			case LEFT:
				len[i] = fm.stringWidth(mes[i]) + offset;
				break;
			case CENTER:
				len[i] = (getSize().width - fm.stringWidth(mes[i])) + fm.stringWidth(mes[i]) + offset;
				break;
			case RIGHT:
				len[i] = getSize().width;
				break;
			}
		}
		
		int sx, sy;
		int maxl = len[0];
		for (i = 1; i < mes.length; i++) {
			if (maxl < len[i]) {
				maxl = len[i];
			}
		}
		sx = maxl;
		sy = (fm.getHeight() + 5 + offset) * mes.length;

		return new Dimension(sx, sy);
	}

	public Dimension getMinimumSize()
	{
		return getPreferredSize();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -