【问题标题】:Java: HTML in Swing, link margin not workingJava:Swing 中的 HTML,链接边距不起作用
【发布时间】:2011-08-13 21:39:41
【问题描述】:

你好
我正在尝试在 Swing 中格式化 HTML 内容。颜色或文本装饰等格式工作正常。但是当涉及到链接的边距时,它根本不起作用。

这是我使用的所有 CSS 语法:

StyleSheet styleSheet = kit.getStyleSheet();
styleSheet.addRule("a {font : arial; text-decoration: none; color: #0174DF; margin-left: 50px}");

除了margin-left 之外的一切都在工作。我在浏览器中测试了语法,它在那里工作正常。我还尝试使用text-align: leftdisplay: block,因为我发现一些文章指出没有链接的边距将无法工作。

使用以下 HTML 代码:

<html><head></head><body><div>
<a href="http://www.zhaw.ch" style="font-size: 50.24324324324324px">akamaitechnologies.com</a>
<a href="http://www.zhaw.ch" style="font-size: 17.37837837837838px">amazonaws.com</a>
<a href="http://www.zhaw.ch" style="font-size: 18.243243243243242px">cotendo.net</a>
<a href="http://www.zhaw.ch" style="font-size: 24.08108108108108px">facebook.com</a>
<a href="http://www.zhaw.ch" style="font-size: 17.594594594594597px">google.ch</a>
<a href="http://www.zhaw.ch" style="font-size: 55.0px">heise.de</a>
<a href="http://www.zhaw.ch" style="font-size: 16.08108108108108px">ip-plus.net</a>
<a href="http://www.zhaw.ch" style="font-size: 21.054054054054056px">ligatus.com</a>
</div></body></html>

HTML 代码由库生成,无法修改。

根据我对 HTML/CSS 的理解,不可能将 margin 样式信息添加到像链接这样的内联对象中,因为不可能使用 margin-top 或 margin-bottom。但是,margin-left 或 margin-right 应该不是问题。

谢谢

编辑:顺便说一下,我正在使用 HTMLEditorKit。

【问题讨论】:

  • padding-left 对你有用吗?
  • @rob 写道:“HTML 代码由库生成,无法修改。”只是今天的信息 Java 支持 Html
  • @rob: "font-size: 50.24324324324324px" 您希望将字体大小控制在像素的 100 万亿分之一以内?
  • @Andrew Thompson:正如我所写,html 代码是由一个库生成的,对此我没有任何影响。但是当我看到输出时,我的想法和你一样。 @mKorbel:所以 HTML 3.2 不支持边距样式信息?如果是这样,是否有一种解决方法可以为上述代码中的链接添加一些边距?
  • @rob:为什么所有 HREF 都指向www.zhaw.ch? (与您的问题无关,只是让我好奇。)

标签: java html swing


【解决方案1】:

这是我在放弃或发疯(或两者兼而有之)之前的最后一次尝试。

TestHtmlIndent.java

import javax.swing.*;

class TestHtmlIndent {

    public static void main(String[] args) {
        String raw =
            "<html><head></head><body><div>" +
            "<a href=\"http://a.b\" style=\"font-size: 20px\">akamaitechnologies.com</a>" +
            "<a href=\"http://a.b\" style=\"font-size: 17px\">amazonaws.com</a>" +
            "<a href=\"http://a.b\" style=\"font-size: 18px\">cotendo.net</a>" +
            "<a href=\"http://a.b\" style=\"font-size: 24px\">facebook.com</a>" +
            "<a href=\"http://a.b\" style=\"font-size: 17px\">google.ch</a>" +
            "<a href=\"http://a.b\" style=\"font-size: 25px\">heise.de</a>" +
            "<a href=\"http://a.b\" style=\"font-size: 16px\">ip-plus.net</a>" +
            "<a href=\"http://a.b\" style=\"font-size: 21px\">ligatus.com</a>" +
            "</div></body></html>";
        String style =
            "<style type='text/css'>" +
            "body {width: 600px;}" +
            ".cloudLink {text-decoration: none; color: #0174DF; " +
            "font-family: helvetica, arial, sans-serif;}" +
            "</style>";
        raw = raw.replace("<head></head>", "<head>" +  style + "</head>");
        String space4 = "&nbsp;&nbsp;&nbsp;&nbsp";
        String space20 = space4 + space4 + space4 + space4 + space4;
        final String processed1 = raw.replace(
            "<a ", space20 + "<a class='cloudLink' ");

        Runnable r = new Runnable() {
            public void run() {
                JOptionPane.showMessageDialog(null, processed1);
            }
        };
        SwingUtilities.invokeLater(r);
    }
}

截图

【讨论】:

  • 感谢您的努力! div 标签上的填充正在工作,让我希望有办法解决我的问题(我假设如果实现了填充,边距也是如此)。但是我需要每个链接之间的边距,因为它们之间没有换行符。很抱歉,如果这不清楚。整个事情应该是一个标签云。
  • 好主意!看起来包装的 div 的填充是有效的。但是每个带有链接的 div 现在都在一个新行上,即使有足够的空间让每行有几个 div 彼此相邻。有没有办法防止这种情况发生?
  • 看起来块级元素在制成display: inline 元素时会丢失它们的填充。所以我暂时没有想法。 :(
  • 假设它是蛮力版本 =) 非常感谢您的努力!这对我有用。谢谢!
【解决方案2】:

它应该工作。您可以向内联元素添加左右边距(不是上下边距) 也许你的styleSheet.addRule 失败了?

生成的 HTML 代码是什么?它尝试了下面的代码并且可以正常工作。也许边距在某些样式表中被覆盖。你检查过萤火虫吗?

<html>
<head>
<style>a {font : arial; text-decoration: none; color: #0174DF; margin-left: 50px}</style>
</head>
<body>
    <div>
        <a href="http://www.zhaw.ch" style="font-size: 50.24324324324324px">akamaitechnologies.com</a>
        <a href="http://www.zhaw.ch" style="font-size: 17.37837837837838px">amazonaws.com</a>
        <a href="http://www.zhaw.ch" style="font-size: 18.243243243243242px">cotendo.net</a>
        <a href="http://www.zhaw.ch" style="font-size: 24.08108108108108px">facebook.com</a>
        <a href="http://www.zhaw.ch" style="font-size: 17.594594594594597px">google.ch</a>
        <a href="http://www.zhaw.ch" style="font-size: 55.0px">heise.de</a>
        <a href="http://www.zhaw.ch" style="font-size: 16.08108108108108px">ip-plus.net</a>
        <a href="http://www.zhaw.ch" style="font-size: 21.054054054054056px">ligatus.com</a>
    </div>
</body>

【讨论】:

  • styleSheet.addRule 正在“工作”。颜色或文本装饰的更改适用于输出。但我会尝试将样式规则直接添加到 html 中,就像您对 &lt;style&gt;&lt;/style&gt; 所做的那样。
  • 那么您的保证金必须被覆盖。尝试在 margin-left: 50px 后添加“!important”
  • 字符串现在看起来像 &lt;html&gt;&lt;head&gt;&lt;style&gt;a {font : arial; text-decoration: none; color: #0174DF; text-align: left; margin-left: 50px !important;}&lt;/style&gt;&lt;/head&gt;&lt;body&gt;... 我不再使用 HtmlEditorKid 的 styleSheet。除margin-left 外,所有样式设置均有效
  • 这很奇怪。一定有一些小错误。顺便说一句:你应该使用 font-family:arial 而不是 font:arial
猜你喜欢
  • 2011-11-10
  • 1970-01-01
  • 2019-01-10
  • 2012-06-22
  • 1970-01-01
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 2012-03-07
相关资源
最近更新 更多