2013-04-25 61 views
0

我擴展了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(); 
      }  
     } 
    } 

回答

1

您應該處理的排列在customTableCellRenderer,爲example。該示例顯示了ListCellRenderer,但原理是相同的。

附錄:我需要添加多個圖標並將它們放置在單元格內。

你實現TableCellRenderer可以返回任何所需Component - 即使一個JPanel有自己的佈局,如here所示StatusPanel。您可能還需要定製TableCellEditor

+0

我不能這樣做,因爲我需要添加幾個圖標並在單元格內以不同的方式放置它們。 – Omid 2013-04-25 14:34:27

+0

如果'DefaultTableCellRenderer'中的HTML支持不足,我沒有看到另一種選擇;更上面。 – trashgod 2013-04-25 17:01:08