Java: HTML в Swing, поле ссылки не работает

#java #html #swing

#java #HTML #swing

Вопрос:

Всем привет
Я пытаюсь отформатировать HTML-содержимое в Swing. Форматирование, такое как цвет или оформление текста, работает нормально. Но когда дело доходит до поля ссылок, оно вообще не работает.

Это весь синтаксис CSS, который я использую:

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

все, кроме margin-left , работает. Я протестировал синтаксис в браузере, и там он отлично работает. Я также пытался использовать text-align: left or display: 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. поле-слева или справа, однако, не должно быть проблемой.

спасибо

редактировать: кстати, я использую HTMLEditorKit.

Комментарии:

1. будет ли заполнение слева работать для вас?

2. @ rob написал «HTML-код генерируется библиотекой и не может быть изменен». просто информация о том, что на сегодняшний день Java поддерживает Html <= 3.2

3. @rob: "font-size: 50.24324324324324px" Вы ожидаете контролировать размер шрифта с точностью до одной 100 триллионной пикселя?

4. @Andrew Thompson: Как я уже писал, html-код генерируется библиотекой, на которую я не имею никакого влияния. Но я подумал то же самое, что и вы, когда увидел результат. @mKorbel: значит, информация о стиле полей не поддерживается в HTML 3.2? Если да, есть ли обходной путь для добавления некоторого поля к ссылкам в упомянутом коде?

5. @rob: Почему все HREFS указывают на www.zhaw.ch ? (На самом деле не имеет отношения к вашему вопросу, это просто вызывает у меня любопытство.)

Ответ №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 = "amp;nbsp;amp;nbsp;amp;nbsp;amp;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);
    }
}
  

Скриншот

введите описание изображения здесь

Комментарии:

1. спасибо за ваши усилия! заполнение тега div работает и дает мне надежду, что есть способ выполнить решение моей проблемы (я предполагаю, что если заполнение реализовано, то и поле тоже). Но мне нужно поле между каждой из ссылок, потому что между ними нет разрыва строки. Большой извини, если это было непонятно. Предполагается, что все это представляет собой облако тегов.

2. Хорошая идея! Похоже, что заполнение обернутых разделов работает. Но каждый div со ссылкой в нем теперь находится на новой строке, даже если было бы достаточно места, чтобы разместить несколько divs рядом друг с другом в строке. Есть ли способ предотвратить это?

3. Кажется, что элементы уровня блока теряют свое заполнение при преобразовании в display: inline элементы. Так что на данный момент у меня нет идей. 🙁

4. Допустим, это версия грубой силы =) Спасибо большое за ваши усилия! У меня это работает. Спасибо!

Ответ №2:

Это должно сработать. Вы можете добавить левое и правое поля к встроенным элементам (не так верхнее и нижнее поля), возможно, ваш styleSheet.addRule сбой?

Какой сгенерированный HTML-код? Он попробовал приведенный ниже код, и он работает. Возможно, поле переопределяется в какой-то таблице стилей. Вы проверяли с помощью firebug?

 <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>
  

Комментарии:

1. Таблица стилей.addRule «работает». Изменения в цвете или оформлении текста применяются к выходным данным. Но я попытаюсь добавить правила стиля непосредственно в html, как вы сделали с <style></style> .

2. тогда ваше поле должно быть превышено. Попробуйте добавить «!важно» после поля слева: 50 пикселей

3. теперь строка выглядит так, как будто <html><head><style>a {font : arial; text-decoration: none; color: #0174DF; text-align: left; margin-left: 50px !important;}</style></head><body>... я больше не использую styleSheet идентификатор HtmlEditorKid. Все настройки стиля работают, за исключением margin-left

4. это странно. Должно быть, произошла какая-то небольшая ошибка. Кстати: вы должны использовать семейство шрифтов: arial вместо font: arial