【问题标题】:html issues with images in JTableJTable中图像的html问题
【发布时间】:2013-04-26 00:59:13
【问题描述】:

我已扩展 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”等来控制图像。问题是如果我使用"&lt;div style&gt;" 会导致换行,所以之后的所有内容都将在下面一行。如果我使用"&lt;span style&gt;",它不会导致换行,但边距不适用于"&lt;span style&gt;"(它应该);

我也尝试过创建自定义 TableCellRenderer 并在其中添加 .css 值并使用 "&lt;div class&gt;" 但换行符的问题仍然存在。

"&lt;div style&gt;" 中的 "display:inline" 通常会消除换行符,margin-left 通常与 "&lt;span style&gt;" 一起使用,但似乎 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();
             }    
        }
    }

【问题讨论】:

    标签: java html swing file-io jtable


    【解决方案1】:

    您应该在custom TableCellRenderer 中处理对齐,对于example。例子显示了ListCellRenderer,但原理是一样的。

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

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

    【讨论】:

    • 我不能那样做,因为我需要添加几个图标并在单元格中以不同的方式放置它们。
    • 如果DefaultTableCellRenderer 中的HTML 支持不足,我看不到其他选择;以上。
    猜你喜欢
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 2018-03-31
    • 2011-04-22
    相关资源
    最近更新 更多