Вопрос

Я пытаюсь отобразить JLabel, который содержит несколько строк текста и изображение следующим образом:

String html = "<html> hello </br> <img src = \"/absolute/path/here\" height = \"30\"  width =\"40\"/> </html>";
JLabel l = new JLabel(html);

Для изображения все, что я получаю, - это разбитое изображение, возможно ли вложить теги img внутрь JLabel?

Редактировать:Я хочу добавить несколько изображений в JLabel, поэтому я не думаю, что использование ImageIcon здесь подойдет.

Спасибо

Это было полезно?

Решение

Вместо того, чтобы пытаться иметь несколько изображений на одной JLabel, почему бы просто не иметь много JLabels, каждая с одним изображением (как описано uthark), а затем сгруппировать все метки вместе на одной JPanel.Это должно дать вам эффект, который вы ищете, с минимальной дополнительной сложностью.

Другие советы

File f = new File("C:\image.jpg"); 
jLabel1.setText("<html><img src=\"file:"+f.toString()+"\">");

У меня это работает.Это просто и дает возможность разместить любое количество изображений, которые вы хотите, а не только один значок изображения.Это не работает без кавычек.

For the image all I get is a broken image, is it possible to nest img tags inside a JLabel

IT является возможно отображение изображений в тексте JLabel.Вы получаете неработающие изображения, потому что путь неправильный.Вам нужно либо добавить в свой путь префикс file: или, предпочтительно, заставить java сделать это за вас с помощью class.getResource("/your/path").Вот рабочий пример, просто вставьте допустимые пути к ресурсам.

import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JLabel; 

public class MultipleImagesExample
{

  public static void main(String[] args)
  {

      JFrame frame = new JFrame();
      frame.setLayout(new BorderLayout());
      JLabel label = new JLabel(
          "<html>"
          + "<img src=\""
          + MultipleImagesExample.class.getResource("/resource/path/to/image1")
          + "\">"
          + "<img src=\""
          + MultipleImagesExample.class.getResource("/resource/path/to/image2")
          + "\">"
          + "The text</html>");
      frame.add(label, BorderLayout.CENTER);
      frame.setBounds(100, 100, 200, 100);
      frame.setVisible(true);
   }

 }

Для более сложного HTML в java я рекомендую xhtmlrenderer ( редактор xhtml ).

Если вас не устраивает JEditorPane, вы, по сути, смотрите на полноценный веб-браузер внутри Swing.

В идеале вы бы использовали JWebPane, который был бы представлением WebKit в качестве компонента Swing, но он еще не выпущен.Самая последняя информация, которую я смог найти, была такой запись в блоге.

Проект DJ позволяет встраивать собственный браузер платформы в Swing.Он использует Internet Explorer в Windows и XULRunner в Linux.Он не имеет никакой поддержки для Mac.

Используйте JEditorPane для отображения HTML-кода.Вы можете изменить фон, фоновое изображение, шрифт и т.д., чтобы оно выглядело как надпись.

Вышеперечисленные подходы, похоже, больше не работают.

Похоже, что теперь вам нужно использовать фактический URI в img пометка.

У меня все работает с "<img src=\"" + new File(...).toURI() + "\">".

Встроенные изображения не поддерживаются в HTML.Таким образом, вы должны использовать setIcon или предоставить ImageIcon конструктору JLabel;HTML не может содержать тег IMG.

  JLabel imageLabel =
  new JLabel(labelText,
             new ImageIcon("path/to/image.gif"),
             JLabel.CENTER);

В вашем случае вам нужно использовать JTextPane ( Текстовая панель ) для отображения HTML.Смотрите учебное пособие здесь

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top