可以显示M2的标签, 2是上标
来源:互联网 发布:魔兽世界画面7.0 优化 编辑:程序博客网 时间:2024/05/17 09:23
这个需求我也不知道有没有用, 我在做一个房地产项目的时候用到, 因为标签里面用"平方米"似乎太长了一点, 为了节约空间所有用了M2这样的字符.
这个东西只能在JDK1.5里面用, 因为用到了com.sun的类. 1.6肯定是要改的, 不过我还没有时间看1.6到底怎么做.
另外这个其实也重写了UI, 不过Label的UI说实话, 各种类型倒也没有什么很大区别, 因为是透明的, 呵呵.
其实有个简单的方法:
label.setText("<html>测试M<sup>2</sup></html>");就可以了, 但是这样的话位置上稍稍有点小问题, 如果不是那么讲究的话, 这个其实是比较省力的方法.
不过我们还是来说说复杂的方法, 毕竟那个2戳在上面不是太好看.
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.metal.MetalLabelUI;
import com.sun.java.swing.SwingUtilities2;
/** *//**
* Created at 2006-9-5 15:35:12<br>
* 字串中M2的2将被上写
*
* @author Brad.Wu
* @version 1.0
*/
@SuppressWarnings("serial")
public class M2Label extends JLabel ...{
public M2Label() ...{
super();
}
public M2Label(String text) ...{
super(text);
}
static class M2LabelUI extends MetalLabelUI ...{
protected static M2LabelUI labelUI = new M2LabelUI();
public static ComponentUI createUI(JComponent c) ...{
return labelUI;
}
/** *//**
* (非 Javadoc)
*
* @see javax.swing.plaf.metal.MetalLabelUI#paintDisabledText(javax.swing.JLabel,
* java.awt.Graphics, java.lang.String, int, int)
*/
@Override
protected void paintDisabledText(JLabel l, Graphics g, String s, int textX, int textY) ...{
String text = l.getText();
if (text.indexOf("M2") != -1) ...{
int mnemIndex = l.getDisplayedMnemonicIndex();
g.setColor(UIManager.getColor("Label.disabledForeground"));
int pos = text.indexOf("M2");
String s1 = text.substring(0, pos + 1);
String s2 = text.substring(pos + 2);
SwingUtilities2.drawStringUnderlineCharAt(l, g, s1, mnemIndex, textX, textY);
Font oldFont = l.getFont();
int width = l.getFontMetrics(oldFont).stringWidth(s1);
Font upperFont = new Font(oldFont.getName(), oldFont.getStyle(), oldFont.getSize() - 4);
g.setFont(upperFont);
SwingUtilities2.drawString(l, g, "2", textX + width, textY - 4);
g.setFont(oldFont);
width += l.getFontMetrics(upperFont).stringWidth("2");
SwingUtilities2.drawStringUnderlineCharAt(l, g, s2, mnemIndex, textX + width, textY);
} else ...{
super.paintEnabledText(l, g, s, textX, textY);
}
}
/** *//**
* (非 Javadoc)
*
* @see javax.swing.plaf.basic.BasicLabelUI#paintEnabledText(javax.swing.JLabel,
* java.awt.Graphics, java.lang.String, int, int)
*/
@Override
protected void paintEnabledText(JLabel l, Graphics g, String s, int textX, int textY) ...{
String text = l.getText();
if (text.indexOf("M2") != -1) ...{
int mnemIndex = l.getDisplayedMnemonicIndex();
g.setColor(l.getForeground());
int pos = text.indexOf("M2");
String s1 = text.substring(0, pos + 1);
String s2 = text.substring(pos + 2);
SwingUtilities2.drawStringUnderlineCharAt(l, g, s1, mnemIndex, textX, textY);
Font oldFont = l.getFont();
int width = l.getFontMetrics(oldFont).stringWidth(s1);
Font upperFont = new Font(oldFont.getName(), oldFont.getStyle(), oldFont.getSize() - 4);
g.setFont(upperFont);
SwingUtilities2.drawString(l, g, "2", textX + width, textY - 4);
g.setFont(oldFont);
width += l.getFontMetrics(upperFont).stringWidth("2");
SwingUtilities2.drawStringUnderlineCharAt(l, g, s2, mnemIndex, textX + width, textY);
} else ...{
super.paintEnabledText(l, g, s, textX, textY);
}
}
}
/** *//**
* (非 Javadoc)
*
* @see javax.swing.JLabel#updateUI()
*/
@Override
public void updateUI() ...{
setUI(new M2LabelUI());
}
public static void main(String[] args) ...{
Font font = UIManager.getFont("Label.font");
UIManager.put("Label.font", new Font(font.getName(), Font.PLAIN, font.getSize()));
JFrame frame = new JFrame();
M2Label label = new M2Label("测试M2:");
label.setEnabled(false);
frame.getContentPane().add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
import java.awt.Graphics;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.metal.MetalLabelUI;
import com.sun.java.swing.SwingUtilities2;
/** *//**
* Created at 2006-9-5 15:35:12<br>
* 字串中M2的2将被上写
*
* @author Brad.Wu
* @version 1.0
*/
@SuppressWarnings("serial")
public class M2Label extends JLabel ...{
public M2Label() ...{
super();
}
public M2Label(String text) ...{
super(text);
}
static class M2LabelUI extends MetalLabelUI ...{
protected static M2LabelUI labelUI = new M2LabelUI();
public static ComponentUI createUI(JComponent c) ...{
return labelUI;
}
/** *//**
* (非 Javadoc)
*
* @see javax.swing.plaf.metal.MetalLabelUI#paintDisabledText(javax.swing.JLabel,
* java.awt.Graphics, java.lang.String, int, int)
*/
@Override
protected void paintDisabledText(JLabel l, Graphics g, String s, int textX, int textY) ...{
String text = l.getText();
if (text.indexOf("M2") != -1) ...{
int mnemIndex = l.getDisplayedMnemonicIndex();
g.setColor(UIManager.getColor("Label.disabledForeground"));
int pos = text.indexOf("M2");
String s1 = text.substring(0, pos + 1);
String s2 = text.substring(pos + 2);
SwingUtilities2.drawStringUnderlineCharAt(l, g, s1, mnemIndex, textX, textY);
Font oldFont = l.getFont();
int width = l.getFontMetrics(oldFont).stringWidth(s1);
Font upperFont = new Font(oldFont.getName(), oldFont.getStyle(), oldFont.getSize() - 4);
g.setFont(upperFont);
SwingUtilities2.drawString(l, g, "2", textX + width, textY - 4);
g.setFont(oldFont);
width += l.getFontMetrics(upperFont).stringWidth("2");
SwingUtilities2.drawStringUnderlineCharAt(l, g, s2, mnemIndex, textX + width, textY);
} else ...{
super.paintEnabledText(l, g, s, textX, textY);
}
}
/** *//**
* (非 Javadoc)
*
* @see javax.swing.plaf.basic.BasicLabelUI#paintEnabledText(javax.swing.JLabel,
* java.awt.Graphics, java.lang.String, int, int)
*/
@Override
protected void paintEnabledText(JLabel l, Graphics g, String s, int textX, int textY) ...{
String text = l.getText();
if (text.indexOf("M2") != -1) ...{
int mnemIndex = l.getDisplayedMnemonicIndex();
g.setColor(l.getForeground());
int pos = text.indexOf("M2");
String s1 = text.substring(0, pos + 1);
String s2 = text.substring(pos + 2);
SwingUtilities2.drawStringUnderlineCharAt(l, g, s1, mnemIndex, textX, textY);
Font oldFont = l.getFont();
int width = l.getFontMetrics(oldFont).stringWidth(s1);
Font upperFont = new Font(oldFont.getName(), oldFont.getStyle(), oldFont.getSize() - 4);
g.setFont(upperFont);
SwingUtilities2.drawString(l, g, "2", textX + width, textY - 4);
g.setFont(oldFont);
width += l.getFontMetrics(upperFont).stringWidth("2");
SwingUtilities2.drawStringUnderlineCharAt(l, g, s2, mnemIndex, textX + width, textY);
} else ...{
super.paintEnabledText(l, g, s, textX, textY);
}
}
}
/** *//**
* (非 Javadoc)
*
* @see javax.swing.JLabel#updateUI()
*/
@Override
public void updateUI() ...{
setUI(new M2LabelUI());
}
public static void main(String[] args) ...{
Font font = UIManager.getFont("Label.font");
UIManager.put("Label.font", new Font(font.getName(), Font.PLAIN, font.getSize()));
JFrame frame = new JFrame();
M2Label label = new M2Label("测试M2:");
label.setEnabled(false);
frame.getContentPane().add(label);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
上面用到的SwingUtilities2类貌似换到了sun.swing包下(1.6). 不知道sun是什么用意, 估计包换一下就可以在1.6下使用了.
如果你想兼容的话, 呵呵, 最好写个Util类替换掉, 自适应么, 应该还是比较简单的.
- 可以显示M2的标签, 2是上标
- maven的.m2文件夹
- m2
- m2
- m2
- m2
- M2
- m2
- 轻量编辑器M2裁剪的时候怎么显示裁剪的数值?
- 一个可以让Xcode显示的页面跟浏览器一样带标签
- 隐藏TabControl 标签但是选项卡可以显示出来的代码
- 可以写字的小标签
- 可以滚动的Label标签
- M1 M2 是什么意思?M1 M2的增速说明什么问题?
- 标签的显示模式
- 使数据库中的<html>标签可以显示在前端
- 可以显示IP的代码
- 可以文本显示的公告栏
- js submit() 对象不支持此属性或方法
- 急急急!!!!!!!!!!帮助我拿下意见,不胜感激!
- 南京华为项目经验总结(大方向)
- htc
- 环境部署问题总结
- 可以显示M2的标签, 2是上标
- 2007年国家公务员考试反思
- 【引】关于接口的理解
- 网页代码收集
- 网易相册列表分析 (转)
- 面向对象与面向过程的简单比较
- 必填项的标签, 显示一个红色的星号"*"
- 工作了一个礼拜了
- 产品经理的14条军规