может ли JLabel иметь img-теги
Вопрос
Я пытаюсь отобразить 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.Смотрите учебное пособие здесь