0

我扩展了 AbstractTableModel 以创建自定义 TableModel。这样做的原因是将 hashmap 绑定到 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"in"<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();
             }    
        }
    }
4

1 回答 1

1

例如,您应该在自定义 TableCellRenderer中处理对齐。例子显示了一个,但原理是一样的。ListCellRenderer

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

您的实现TableCellRenderer可以返回任何想要Component的——甚至是JPanel带有自己布局的 a,例如此处StatusPanel所示。您可能还需要自定义.TableCellEditor

于 2013-04-25T09:52:02.560 回答