📄 multilinelabel.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 + -