首页 > 编程知识 正文

pycharm怎么设置自动换行,label标签怎么换行

时间:2023-05-06 18:42:53 阅读:173617 作者:3739

我在JLabel上显示一些文本。 基本上,我会动态生成这个文本,然后应用BR和b等HTML标签来设置文本的格式。 最后,把这个格式的文本分配给我的JLabel。

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

我怎样才能做到这一点?

作为参考,fkdmy的回答是最好的。

@HovercraftFullOfEels只是知道截图要做什么! VBG

是的,我还得再做一点,但是还有正确答案的帮助。 我认为你应该学习HTML和风格.

@AndrewThompson他们很帅,但是你的回答很慢! )

@HovercraftFullOfEels是第二句1,不仅是你自己,还有使用任何语言的服务器端开发者。 令人惊讶的是,servlet开发人员对APP应用的HTML知之甚少。 上涌。 关于第一个…可能有人认为我继续添加图像是视觉噪声。

@MarianP是的,所以我使用了技巧。 发布源1,在编辑中添加图片。 当然,因为我写了(v ),所以这个没有用。 short ) )的源代码比打上两个回答和一个复选标记花了更多的时间。 )

可以使用HTML样式[CSS]设置宽度。 相反,这将确定要渲染的行数,并确定标签的首选高度。

在CSS中设置宽度可以避免需要计算标签(或标签的最佳大小)的换行符的位置。

import javax.swing.*;

公共类别固定宽度标签{

publicstaticvoidmain (string [ ] srgs )。

final strings=' loremipsumdolorsitamet,consecteturadipiscingelit.aeneaneunullaurna.donecsitametrisusnisl,a porta enim . ligula eu scelerisque gravida、tellus quam vestibulum urna、utaliquetsapienpurussederat.pellentesqueconsequatvehiculamagna、 eualiquammagnainterdumporttitor.classaptenttacitisociosquadlitoratorquentperconubianostra、 perinceptoshimenaeos.sedsollicitudinsapiennonleotempuslobortis.morbisemperauctoripsum,asemperquamelementuma.aliquamegegege

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 () )。

新列表bullet ';

@ B1CL0PS ' .这还可能吗?' 当然可以! 如果失败,建议根据自己的问题发布MCVE。

正如刚才注意到的那样,附带的JLabel是本地的L&; f附带的Vista和7的外观不同。 trello-attachments.S3.amazonaws.com/51 b5 F6 a 477 d99db 36005655 /

请注意,某些字符可能需要转换为转义或等效的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,这是很久以前的事,我真的不记得有关它的任何内容。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。