могут ли JLabel иметь теги img - PullRequest
5 голосов
/ 20 марта 2010

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

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

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

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

Спасибо

Ответы [ 7 ]

5 голосов
/ 22 августа 2012
File f = new File("C:\image.jpg"); 
jLabel1.setText("<html><img src=\"file:"+f.toString()+"\">");

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

4 голосов
/ 04 января 2011

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

Это возможно отображать изображения в тексте 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 .

2 голосов
/ 21 марта 2010

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

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

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

1 голос
/ 05 июня 2018

Представленные выше подходы, похоже, больше не работают.

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

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

1 голос
/ 21 марта 2010

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

1 голос
/ 20 марта 2010

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

0 голосов
/ 20 марта 2010

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

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

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

...