java - JTable 中图像的 html 问题

标签 java html swing file-io jtable

我扩展了 AbstractTableModel 来创建自定义 TableModel。这样做的原因是将 hashmap 绑定(bind)到 JTable。

在我的 TableModel 中,在其中一行上我返回这样的 html 代码:

@Override
        public Object getValueAt(int rowIndex, int columnIndex) {

             switch (columnIndex) {
             case 0:    
                    String sTest = "<div style=\"margin-left:100px;\"><img src='" + new ImageIcon(Wds.class.getResource("/resources/video.png"))+ "'</div>";
                return "<html>" + sTest + sTest + "hello" + "</html>";              

             default:
                    throw new IndexOutOfBoundsException();
             }    
        }

我现在遇到的问题是Java中的html支持似乎很糟糕。

我需要使用“margin-left、margin-top”等来控制图像。问题是,如果我使用"<div style>"它会导致换行,因此之后的所有内容都将在下面一行。如果我使用 "<span style>"它不会导致换行,但边距不适用于 "<span style>" (它应该);

我还尝试创建自定义 TableCellRenderer 并在其中添加 .css 值并使用 "<div class>"但换行问题仍然存在。

通常"display:inline""<div style>"消除了换行符和 margin-left通常与 "<span style>" 一起使用,但 Java 对 HTML 的支持似乎很差。

有人对我如何解决这个问题有任何建议吗?

这里是完整的 SSCCE 代码:

private Map<String, String> list = new LinkedHashMap<String,String>();

    class MyTableModel extends AbstractTableModel {

        private String[] columnNames = {"Column1"}; 

        public void addElement(String sElement, String sElement2) {         

            list.put(sElement, sElement2);
            fireTableRowsInserted(list.size(), list.size());

        }

        @Override
        public int getColumnCount() {
            return columnNames.length;
        }

        @Override
        public int getRowCount() {
            return list.size();
        }

        @Override
        public String getColumnName(int col) {
            return columnNames[col];
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {

             switch (columnIndex) {
             case 1:    
                    String sTest = "<div style=\"margin-left:100px;\"><img src='" + new ImageIcon(Wds.class.getResource("/resources/video.png"))+ "'</div>";
                    return "<html>" + sTest + sTest + "hello" + "</html>";

             default:
                    throw new IndexOutOfBoundsException();
             }    
        }
    }

最佳答案

您应该在 custom 中处理对齐方式TableCellRenderer,用于 example 。该示例显示了一个 ListCellRenderer,但原理是相同的。

附录:我需要添加几个图标并将它们放置在单元格内的不同位置。

您的 TableCellRenderer 实现可以返回任何所需的 Component,甚至是具有自己布局的 JPanel,例如 StatusPanel 显示 here 。您可能还需要自定义 TableCellEditor

关于java - JTable 中图像的 html 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16209322/

相关文章:

html - CSS Reset 干扰主 CSS 样式表,clearfix 不起作用

javascript - 在展开和折叠表格时默认隐藏行

java - 如何编写多线程代码来加速繁重的重复性任务?

Java Swing getRootPane() 返回 null

java - 如何将java文件编译为使用其他.class的.class。 (如果它是可能的)

html - 将图像拉伸(stretch)到视口(viewport)的 100%

java - 从 ArrayList 打印

java - 将 JPanel 行添加到 JTable 模型

java - 当 if 语句失败时返回上一个 if 语句

java - 获取子标签具有属性 x 的属性