2012-02-10 37 views
2

現在用的是下面的代碼顯示在JTable中cell.I圖像有附加圖像中JTable中單元格的兩個問題。如何使用渲染器在Jtable單元格中設置圖像?

1.如果我單擊表中的第一行,那麼「Pointer.gif」圖像將顯示在該行中。當我單擊第二行時,「指針.gif」圖像將顯示在第二行中,第一行獲得「blank.Gif」。然後我點擊第三排的Pointer.gif將在第三行中顯示,第二行得到第一row.In的「blank.gif」這一次的第一行會得到空(這意味着第一行沒有得到pointer.gif和blank.gif)。如何做到這一點?

2.第二個問題是如果我選擇第一行pointer.gif將顯示第一行。當我單擊第二行時,pointer.gif將移動第二行,第一行變爲empty.how做這個?

我的問題是,當我使用下面的代碼「blank.gif」將在整個column.when顯示我點擊特定行「pointer.gif」將在那個地方顯示。

class FRM_FLXD_ICON_ASSGN extends DefaultTableCellRenderer { 
      ImageIcon Icon; 
     public Component getTableCellRendererComponent(
      JTable table, Object value, boolean selected, boolean focus, 
      int row, int col) { 
      if(selected == true){ 
       Icon=new ImageIcon(getClass().getResource("pointer.gif")); 
      } 
     else{ 
      Icon=new ImageIcon(getClass().getResource("blank.jpg")); 
     } 
      this.setIcon(Icon); 
      return this; 
     } 

    } 
    call this class like, 

    table1.getColumnModel().getColumn(0).setCellRenderer(new FRM_FLXD_ICON_ASSGN()); 
+0

爲了更好地幫助越早,張貼[SSCCE(http://sscce.org/)。對於涉及圖像的SSCCE,熱鏈接到它們,從JRE獲取它們或者在代碼中生成它們。 – 2012-02-10 06:01:14

回答

2

在您的渲染器中getTableCellRendererComponent將使用圖標返回jLabel。

class FRM_FLXD_ICON_ASSGN extends DefaultTableCellRenderer { 
      JLabel jLabel; 
     public Component getTableCellRendererComponent(
      JTable table, Object value, boolean selected, boolean focus, int row, int col) { 
      jLabel = new JLabel(); 
      if(selected == true){ 
       jLabel.setIcon(new ImageIcon(ImageIO.read(new File("C://pointer.jpg")))); 
      } 
     else{ 
      jLabel.setIcon(new ImageIcon(ImageIO.read(new File("C://blank.jpg")))); 
     } 
      return jLabel; 
     } 
    } 
+0

如果我這樣使用,我得到了以下錯誤javax.imageio.IIOException:無法讀取輸入文件! – javalearner 2012-02-10 07:15:26

+0

因爲你沒有這樣的文件。您必須指定文件的路徑。 – alnasfire 2012-02-10 07:30:49

2

我覺得每次渲染單元格時都會加載圖片,並且會消耗大量的RAM。外包該代碼。 如果將.jar的getResource內包你imags()是正確的。

我會想到它是這樣。

ImageIcon pointer = new ImageIcon(getClass.getResource("pointer.jpg"))); 
ImageIcon blank = new ImageIcon(getClass.getResource("blank.jpg"))); 

class FRM_FLXD_ICON_ASSGN extends DefaultTableCellRenderer { 
     JLabel jLabel; 
    public Component getTableCellRendererComponent(
     JTable table, Object value, boolean selected, boolean focus, int row, int col) { 
     if(selected == true){ 
      jLabel.setIcon(pointer); 
     } 
    else{ 
     jLabel.setIcon(); 
    } 
     return jLabel; 
    } 
} 

編輯:

也許這應該是更像是

ImageIcon pointer = new ImageIcon(getClass.getResource("pointer.jpg"))); 
ImageIcon blank = new ImageIcon(getClass.getResource("blank.jpg"))); 

class FRM_FLXD_ICON_ASSGN extends DefaultTableCellRenderer { 
     JLabel jLabel; 
    public Component getTableCellRendererComponent(
     JTable table, Object value, boolean selected, boolean focus, int row, int col) { 
     if(table.isColumnSelected(column)){ 
      jLabel.setIcon(pointer); 
     }else{ 
      jLabel.setIcon(blank); 
     } 
     return jLabel; 
    } 
} 

,並在你的表,你應該將其附加到你想只顯示指針列。

table.getColumnModel().getColumn(1).setCellRenderer(new YourRenderer()); 
+0

jLabel.setIcon()可以在整列中設置空圖標。當我點擊指針時會顯示 – javalearner 2012-02-10 07:26:26

+0

對不起。這應該意味着jLabel.setIcon(空白); – NotANormalNerd 2012-02-10 07:55:55

2

渲染器返回

JTable table, Object value, boolean selected, boolean focus, int row, int col 

每個值可能是可測試,其中大部分可設置(爪哇需要良好的知識...),這意味着你可以爲

  • 測試Object instanceOf Whatever

  • selected

  • focus

  • JTable's row & col

真的時間去看看prepareRenderer

相關問題