我擴展了AbstractTableModel來創建自定義TableModel。這樣做的原因是將hashmap綁定到JTable。JTable中的圖像的html問題
在我的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();
}
}
}
我不能這樣做,因爲我需要添加幾個圖標並在單元格內以不同的方式放置它們。 – Omid 2013-04-25 14:34:27
如果'DefaultTableCellRenderer'中的HTML支持不足,我沒有看到另一種選擇;更上面。 – trashgod 2013-04-25 17:01:08