我在JLabel中显示一些文本。 基本上,我是动态生成该文本的,然后应用一些HTML标记(例如BR和B)来格式化文本。 最后,我将此格式文本分配给我的JLabel。

现在,我希望Jlabel在到达屏幕末尾时自动将文本换行到下一行,例如"记事本"中的"自动换行"功能。

我怎样才能做到这一点?

仅供参考,安德鲁斯的回答是最好的。

@HovercraftFullOfEels 我只是知道屏幕截图会有所作为! VBG>

是的,我必须再做一点,但是仍然有正确答案的帮助。 我想我应该学习一些HTML和样式...

@AndrewThompson他们很酷,但是让你回答慢! :)

@HovercraftFullOfEels为第二句话+1,不仅仅是您自己,还有任何使用任何语言的服务器端开发人员。 令我惊讶的是(例如)Servlet开发人员对他们的应用程序的HTML了解很少。 喷涌而出。 至于第一个..有人可能认为我不断添加图像是视觉噪声。

@MarianP是的,所以我使用了一个技巧。 将源1发布,然后在编辑中添加图像。 当然,这并没有帮助,因为我写(v。short)的源代码比花两个答案和一个勾号花了更长的时间。 ;)

可以使用HTML样式(CSS)为设置宽度。反过来,这将确定要渲染的行数,并由此确定标签的首选高度。

在CSS中设置宽度避免了需要计算标签(或标签的最佳尺寸)出现换行的位置。

import javax.swing.*;

public class FixedWidthLabel {

public static void main(String[] srgs) {

final String s ="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean eu nulla urna. Donec sit amet risus nisl, a porta enim. Quisque luctus, ligula eu scelerisque gravida, tellus quam vestibulum urna, ut aliquet sapien purus sed erat. Pellentesque consequat vehicula magna, eu aliquam magna interdum porttitor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed sollicitudin sapien non leo tempus lobortis. Morbi semper auctor ipsum, a semper quam elementum a. Aliquam eget sem metus.";

final String html ="

%1s";

Runnable r = () -> {

JOptionPane.showMessageDialog(

null, String.format(html, 200, s));

JOptionPane.showMessageDialog(

null, String.format(html, 300, s));

};

SwingUtilities.invokeLater(r);

}

}

是的,这是赢家。 :)

+1,如果您需要具有可变宽度的标签,则可以使用" 100%"而不是" 200px"(假设您的GUI使用适当的布局管理器)。

次要点-您不需要关闭标记吗?

@SteveCohen如果这是浏览器的HTML,是的。这只是Swing组件的HTML,我们可以做许多快捷方式。这样做的一个优点是,它使我们能够(轻松)动态地向HTML添加新内容。例如。 label.setText( label.getText() +"

New list bullet" );

@ B1CL0PS" ..它仍然可行吗?.."当然可以!如果对您失败,则最好根据自己的问题发布MCVE。

刚刚注意到,带有的JLabel在带有本地L&F的Vista和7上的外观有所不同:trello-attachments.s3.amazonaws.com/51b5f6a477d99db360005655/

请记住,某些字符需要转义或转换为等效的HTML。

@ChrisDennett是的,您是对的,需要注意和注意的地方。

如果将文本换成...,应该可以使用

更新:

然后,您可能也应该设置最大大小。

我已经用HTML包装了文本,例如一些文本

一些文本 html>是否需要使用一些特定的HTML标签进行包装

尝试在该JLabel上调用setMaximumSize

好,谢谢

" 一些文本

" Web开发人员正在沉迷于坟墓。使用样式。

@AndrewThompson是的,JS呢。或闪光灯! :)

这些天有很多事情发生! :)

我说,将对Java applet的支持添加到Swing组件html文本中。这应该很有趣!

"我说,将对Java applet的支持添加到Swing组件html文本中。"请参阅Appleteer-它使用JEditorPane。"这应该很有趣!"不,这不对。相信我。 ;)

@Jame:仅供参考,Netbeans与您的问题无关-它只是IDE。 Java是您问题的主要主题...

只是愚蠢。谢谢

OK ..但我不明白。

我只是想象Flash在JLabel中运行,这使我几乎成为ROFL。

一种方法是使用JTextArea代替JLabel,并且将setWrapStyleWord和setLineWrap设置为true,并进行设置以使其外观和行为类似于JLabel(移除边框,不透明,使其不可编辑且无法聚焦)。

否则,如果您绝对需要使用JLabel,则将被迫使用FontMetrics来测量文本,检查空格,然后自己在适当的位置添加HTML硬符。

Web开发人员正在"加码HTML难攻"。使用样式。

我显然不是网络开发人员。感谢您的注意,也感谢所有烦躁不安的Web开发人员-抱歉,还有RIP。

这是当前的实现,并且一旦格式化的字符串大于标签的尺寸,它将不起作用。

我发现该解决方案是最简单的,并且在调整大小的同时也可以正常工作。除了将文本包装在标记中外,还必须将标签放入尊重首选高度并将宽度设置为最大的容器中。例如,您可以将标签放在BorderLayout的北侧。

这是一个简单但完整的工作程序来说明这一点。您可以根据需要调整框架的大小。标签将占据整个宽度,高度将相应调整以包裹文本。请注意,我正在做的只是使用标记并将标签放置在BorderLayout的北部。

import javax.swing.JFrame;

import javax.swing.SwingUtilities;

import javax.swing.JPanel;

import javax.swing.JLabel;

import java.awt.BorderLayout;

import java.awt.Dimension;

public class LabelWrap {

public static JPanel createPanel() {

JLabel label = new JLabel();

label.setText(""

+"Lorem ipsum dolor sit amet, consectetur adipiscing elit."

+"

Duis a tincidunt urna. Phasellus tristique interdum mauris,"

+"ut vestibulum purus suscipit eget. Aenean massa elit, accumsan"

+"non faucibus vel, dictum placerat urna. In bibendum est sagittis"

+"urna iaculis quis sagittis velit commodo. Cum sociis natoque"

+"penatibus et magnis dis parturient montes, nascetur ridiculus"

+"mus. Nam quis lacus mauris. Phasellus sem libero, convallis"

+"mattis sagittis vel, auctor eget ipsum. Vivamus molestie semper"

+"adipiscing. In ac neque quis elit suscipit pharetra. Nulla at"

+"orci a tortor consequat consequat vitae sit amet elit. Praesent"

+"commodo lacus a magna mattis vehicula. Curabitur a hendrerit"

+"risus. Aliquam accumsan lorem quis orci lobortis malesuada.

+"

Proin quis viverra ligula. Donec pulvinar, dui id facilisis"

+"vulputate, purus justo laoreet augue, a feugiat sapien dolor ut"

+"nisi. Sed semper augue ac felis ultrices a rutrum dui suscipit."

+"Praesent et mauris non tellus gravida mollis. In hac habitasse"

+"platea dictumst. Vestibulum ante ipsum primis in faucibus orci"

+"luctus et ultrices posuere cubilia Curae; Vestibulum mattis,"

+"tortor sed scelerisque laoreet, tellus neque consectetur lacus,"

+"eget ultrices arcu mi sit amet arcu. Nam gravida, nulla interdum"

+"interdum gravida, elit velit malesuada arcu, nec aliquam lectus"

+"velit ut turpis. Praesent pretium magna in nibh hendrerit et"

+"elementum tellus viverra. Praesent eu ante diam. Proin risus"

+"eros, dapibus at eleifend sit amet, blandit eget purus."

+"Pellentesque eu mollis orci. Sed venenatis diam a nisl tempor"

+"congue.

+"");

JPanel panel = new JPanel(new BorderLayout());

panel.add(label, BorderLayout.NORTH);

panel.setPreferredSize(new Dimension(640, 480));

return panel;

}

/**

* @param args

*/

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

JFrame frame = new JFrame();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setContentPane(createPanel());

frame.pack();

frame.setVisible(true);

}

});

}

}

我喜欢上面提到的JTextArea方法,因为它可以很好地在BorderLayout面板中的SOUTH处调整大小(只要JTextArea中的行数发生变化,只要CENTER组件可以占用余量)。

但是,在Nimbus L&F中,设置JTextArea的背景色存在一些困难。似乎Nimbus使用了神奇的颜色(java.awt.Color的扩展类)在JTextArea中变得透明。因此,如果要将背景颜色从JPanel复制到JText区域,则需要将Color转换为ARGB并重新转换为Color。以下代码对我的JRE(Nimbus,CDE Motif,Metal,Mac OS X)中的所有L&F都适用:

JTextArea ta = new JTextArea(text);

ta.setEditable(false);

ta.setLineWrap(true);

ta.setWrapStyleWord(true);

JLabel lb = new JLabel();

Font f = lb.getFont();

ta.setFont(f.deriveFont(f.getSize2D() * 0.9f));

ta.setBorder(lb.getBorder());

ta.setBackground(new Color(lb.getBackground().getRGB(), true));

ta.setForeground(new Color(lb.getForeground().getRGB(), true));

ta.setOpaque(lb.isOpaque());

我使字体变小了。当然,您可以根据需要保留JLabel的字体大小。

尝试保持话题。

我相信我一直关注话题。我指出了使用JTextArea的两个问题(在调整大小和在Nimbus中设置颜色时更改的行数),并给出了两种解决方法。

只是想我应该把它发布给任何在互联网上搜索的人,因为这是个花费30分钟的小错误,但请确保您实际上已将文本包装成HTML。您可能以为自己做到了,但是没有。检查它,我忘了,当我用HTML包装它们时,它为我修复了它。

JLabel label = new JLabel("Lorem ipsum long paragraph");错误。

JLabel label = new JLabel("Lorem ipsum long paragraph");正确!

没有工作..我正在尝试一个简单的窗口..

抱歉,Nabin,这是很久以前的事,我真的不记得有关它的任何内容。

java 中多个label如何换行,关于java:JLabel是否有“自动换行”属性?相关推荐

  1. java中随机数怎么定义类_浅析Java中的随机数类

    Java中的随机数是否可以重复?Java中产生的随机数能否可以用来产生数据库主键?带着这个问题,我们做了一系列测试. 1.测试一: 使用不带参数的Random()构造函数 * @author Carl ...

  2. java弱引用怎么手动释放,十分钟理解Java中的弱引用,十分钟java引用

    十分钟理解Java中的弱引用,十分钟java引用 本篇文章尝试从What.Why.How这三个角度来探索Java中的弱引用,帮助大家理解Java中弱引用的定义.基本使用场景和使用方法.由于个人水平有限 ...

  3. java中访问不可视字段_Kotlin与Java的不同之处

    code小生,一个专注 Android 领域的技术平台 公众号回复 Android 加入我的安卓技术群 作者:小村医 链接:https://www.jianshu.com/p/f7deb4fe6427 ...

  4. java中获取文件总行数_关于java:如何以有效的方式获取文件中的行数?

    本问题已经有最佳答案,请猛点这里访问. 我有一个大文件. 它包括大约3.000-20.000行. 如何使用Java获取文件中的行总数? 从你的评论到答案来判断,你要找的词是"有效的" ...

  5. java中注解的解析_全面解析Java中的注解与注释

    注解一.什么是 Annotation? (注解 or 注释)Annotation, 准确的翻译应该是 -- 注解. 和注释的作用完全不一样. Annotation 是JDK5.0及以后版本引入的一个特 ...

  6. 在java中使用关键字导入包_在Java中,若要使用一个包中的类时,首先要求对该包进行导入,其关键字是( )。...

    [单选题]声明公用的abstract方法的正确格式是( ). [单选题]在创建对象时必须( ). [单选题]目前公认的酶与底物结合的学说是 [填空题(主观)]层理的常见类型有哪些? [单选题]关于网页 ...

  7. java中的invoke方法_详解Java中Method的Invoke方法

    在写代码的时候,发现从父类class通过getDeclaredMethod获取的Method可以调用子类的对象,而子类改写了这个方法,从子类class通过getDeclaredMethod也能获取到M ...

  8. java中io是什么_深入理解Java中的IO

    深入理解Java中的IO 转载自:http://blog.csdn.net/qq_25184739/article/details/51205186 本文的目录视图如下: Java IO概要 a.Ja ...

  9. JAVA中流水账的实现_流水账式java基础Summary

    来一篇java基础知识的小总结,采用流水账式,不是特意的,而是不知道用什么形式把这些东西联系起来,那就想起什么写些什么吧 关键字:java中赋予特殊含义,具有专门用途的的单词,class.public ...

最新文章

  1. Storm集群安装部署步骤【详细版】
  2. linux内核丢弃udp报文,c++ Linux UDP数据包丢失的原因
  3. ES bulk源码分析——ES 5.0
  4. python画图代码turtle-使用Python的turtle模块画图的方法
  5. php怎么关联默认打开程序,win10系统打开文件时提示“请在默认程序控制面板中创建关联”如何解决...
  6. Oracle 10g OCM Exam 大纲
  7. Java黑皮书课后题第5章:*5.51(最长的共同前缀)编写一个程序,提示用户输入两个字符串,显示两个字符串最长的共同前缀
  8. 【Android】3.3 MapFragment的使用
  9. mysql导入的excel更新_excel导入数据库,存在则更新不存在添加
  10. 计算机不能启动 无法验证数字签名,win10改win7系统启动后提示:无法验证此文件的数字签名怎么办?...
  11. 经典线程同步 事件Event
  12. C#刨根究底:《你必须知道的.NET》读书笔记系列
  13. exit()和_exit()的区别
  14. 《程序设计技术》第四章例程
  15. editplus破解源码
  16. 漫画安全HIDS、EDR、NDR、XDR
  17. android studio编辑环境变量,Android studio gradle环境变量配置教程
  18. Python 在 excel 中画 饼状图 折线图
  19. 聚类算法(五)——层次聚类 linkage (含代码)
  20. Vijos P1153 猫狗大战(动态规划,背包)

热门文章

  1. linux程序卸载动态库,Intel平台下linux中ELF文件动态链接的加载、解析及实例分析(二): 函数解析与卸载...
  2. 微信小程序开发:微信小程序生命周期总结
  3. js阻止冒泡,兼容写法。
  4. 为什么挂脖式不适合运动呢?五款舒适好用的入耳式蓝牙耳机不妨试试
  5. 炒了8年的概念,到底该如何理解DevOps这个词
  6. OBS黑屏win10解决方法
  7. 《每日一荐月刊》2020-01
  8. WIN7任务栏的QUICK LAUNCH怎么调出来
  9. vue 写的登录页面
  10. Photoshop-填充和描边