怎样让Jlabel垂直显示文字

isly_sn 2010-02-13 07:58:39
如何让Jlabel垂直显示文字?,就比如这么显示:




试过 new JLabel("<html>垂<br>直<br>显<br>示</html>")
但是感觉文字间距太大了,有没有别的方法?
...全文
303 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ostholz 2010-02-19
  • 打赏
  • 举报
回复
效果
ostholz 2010-02-19
  • 打赏
  • 举报
回复
下面是我做过的实现,有左右两个竖排label,没有注释。 看懂了结贴给分啊。

private void drawLabel(Graphics g2d){
convertLabel();
// FontMetrics fm = getFontMetrics(new Font("Serif", Font.PLAIN,10));
FontMetrics fm = getFontMetrics(getFont());
int fontHeight = fm.getAscent()+fm.getDescent()-1;
int dy = width+topMargin+width/10;
int mengeLbl_y = getMengeLabel().getLocation().y;
g2d.setColor(Color.BLUE);
for(int i=0;i<convertedBelnumLabel.length;i++){
if(dy<mengeLbl_y)
g2d.drawString(convertedBelnumLabel[i], xForLinkLabel[i], dy);
dy+=fontHeight;
}
dy = width+topMargin+width/10;
g2d.setColor(Color.BLACK);
for(int i=0;i<convertedBezeichnungLabel.length;i++){
if(dy<mengeLbl_y)
g2d.drawString(convertedBezeichnungLabel[i], xForRightLabel[i], dy);
dy+=fontHeight;
}
}

private void convertLabel(){
int len = 0;
int baseX = 0;
char[] data;
char ch;
int maxWidth = 0;
Font f = getFont();
int fSize = f.getSize();
FontMetrics fm = getFontMetrics(new Font(f.getFontName(), f.getStyle(), fSize+1));
// for linkLabel
len = belnumLabel.length();
data = new char[len];
belnumLabel.getChars(0, len, data, 0);
convertedBelnumLabel = new String[len];
xForLinkLabel = new int[len];
for(int i=0;i<len;i++){
ch = data[i];
int width = fm.charWidth(ch);
if(width > maxWidth){
maxWidth = width;
}
convertedBelnumLabel[i] = new String(data, i, 1);
}
baseX = (width+2*maxWidth)/4-maxWidth/2;
for(int i=0;i<len;i++){
ch = data[i];
xForLinkLabel[i] = (maxWidth-fm.charWidth(ch))/2+baseX;
}

// for rightLabel
len = bezeichnungLabel.length();
data = new char[len];
bezeichnungLabel.getChars(0, len, data, 0);
convertedBezeichnungLabel = new String[len];
xForRightLabel = new int[len];
for(int i=0;i<len;i++){
ch = data[i];
int width = fm.charWidth(ch);
if(width > maxWidth){
maxWidth = width;
}
convertedBezeichnungLabel[i] = new String(data, i, 1);
}
baseX = width*3/4-maxWidth/2;
for(int i=0;i<len;i++){
ch = data[i];
xForRightLabel[i] = (maxWidth-fm.charWidth(ch))/2+ baseX;
}

}
njzdl 2010-02-16
  • 打赏
  • 举报
回复
引用 2 楼 lgg201 的回复:
Swing应该是支持css样式的...可以找找相关资料

who said?

可以考虑改用jpanel以及boxlayout来实现, 效果肯定让你满意
sd4324530 2010-02-14
  • 打赏
  • 举报
回复
怎么跟我的JAVA群里的同学问的问题一样,但是我也不知道怎么实现
goosman 2010-02-13
  • 打赏
  • 举报
回复
Swing应该是支持css样式的...可以找找相关资料
Inhibitory 2010-02-13
  • 打赏
  • 举报
回复
在paintComponent里进行手动绘制。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧