如何禁用JLabel中的自动换行,即使使用<html>标签也是如此

10

每当JLabel标签中包含文本时,它似乎会自动应用换行。我的要求是无论标签包含什么文本,换行都应该被禁用。由于遗留原因,我不能在渲染器中使用JTextArea。


据我所知,JLabel 通常是单行显示的,除非它使用 HTML 渲染。 - Guillaume Polet
同意,但即使是对于HTML渲染,我也不想进行换行,也许一些HTML标签可以在这里帮助? - niteen22
1个回答

18
  1. 您可以在不希望被包装的HTML内容周围使用<nobr></nobr>标签
  2. 简单的非HTML内容永远不会被包装在JLabel中

以下是一个示例:

public static void main ( String[] args )
{
    JFrame frame = new JFrame ();
    frame.setLayout ( new BorderLayout () );

    final String html = "<html><body><nobr>CMV Antigenemia Stat X 2.0 dose(s)</nobr></body></html>";
    final String simple = "<html><body>CMV Antigenemia Stat X 2.0 dose(s)</body></html>";

    JTable table1 = new JTable ( new String[][]{ { html, html, html, html, html } }, new String[]{ html, html, html, html, html } );
    table1.setRowHeight ( 50 );
    frame.add ( table1, BorderLayout.NORTH );

    JTable table2 = new JTable ( new String[][]{ { simple, simple, simple, simple, simple } },
            new String[]{ simple, simple, simple, simple, simple } );
    table2.setRowHeight ( 50 );
    frame.add ( table2, BorderLayout.CENTER );

    frame.pack ();
    frame.setLocationRelativeTo ( null );
    frame.setVisible ( true );
}

正如您所看到的 - 在第一个表中,HTML内容没有被包裹。


尝试过这个,但没有起作用。我正在将此标签添加到JTable中 - 基本上我的渲染器组件是JLabel。 - niteen22
具体是什么没有起作用?您是如何在HTML代码周围插入<nobr>标签的?请在您的问题中添加一些代码,简要描述问题。 - Mikle Garin
我在渲染器的getTableCellRendererComponent方法中获得了以下文本:“<html><body><nobr>CMV Antigenemia Stat X 2.0剂量</nobr></body></html>”,由于遗留原因,此处返回的组件必须是JLabel(文本区域也可以解决这个问题)。 - niteen22
@niteen22,你做错了什么——检查一下我在答案中添加的代码。你在上一个评论中发布的HTML内容不会被包裹(也不应该)——只需尝试调整框架大小即可。那么问题是什么? - Mikle Garin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接