2012-07-17 68 views
1

我想我得到的imageIcon在每個單元格中顯示方式不同,但由於某種原因,當我編譯它時,圖像不顯示。它顯示圖像的名稱,但圖像本身不顯示。這是一張圖片。 http://i49.tinypic.com/r9ibrn.jpgJTable中的不同單元格中的不同imageIcon

public class movies extends JFrame { 

    public movies() { 
    initComponents(); 

}  

private void initComponents() { 

    panel = new JPanel(); 
    logo = new JLabel(); 
    pane = new JScrollPane(); 


    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setBackground(new Color(255, 255, 204)); 
    setResizable(false); 

    panel.setBackground(new Color(51, 51, 51)); 
    panel.setPreferredSize(new Dimension(290, 75)); 

    logo.setIcon(new ImageIcon(getClass().getResource("logo.png"))); 
    logo.setName("logo"); 
    logo.setRequestFocusEnabled(false); 
    logo.setVerifyInputWhenFocusTarget(false); 
    logo.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); 


    ImageIcon icon1 = new ImageIcon("1.jpg"); 
    ImageIcon icon2 = new ImageIcon("2.jpg"); 
    ImageIcon icon3 = new ImageIcon("3.jpg"); 

    String[] columnNames = {"Section 1", "Section 2"}; 
    Object[][] data = 
    { 
     {icon1 + " Music", icon2 + " News"}, 
     {icon2 + " Movies"}, 
     {icon3 + " Games"}, 
    }; 

    DefaultTableModel model = new DefaultTableModel(data, columnNames); 
    JTable table = new JTable(model) 

    { 
      public Class getColumnClass(int column) 
     { 
      return getValueAt(0, column).getClass(); 
     } 
    }; 


    table.setPreferredScrollableViewportSize(table.getPreferredSize()); 

    table.setBackground(new Color(255, 255, 204)); 
    JScrollPane scrollPane = new JScrollPane(table); 
    getContentPane().add(scrollPane); 

    table.setRowHeight(50); 
    pane.setViewportView(table); 
    table.getColumnModel().getColumn(0).setResizable(false); 
    table.getColumnModel().getColumn(1).setResizable(false); 
} 


public static void main(String args[]) { 


     public void run() { 
      new movies().setVisible(true); 

     } 
    }); 
} 

private JLabel logo; 
private JScrollPane pane; 
private JPanel panel; 

}

+0

我沒有足夠的動機現在破譯你的代碼,看看到底出了什麼問題,但我會說,如果我是你,這種行爲將利用我的注意力轉向如何引用類型正在傳遞和設置。 – 2012-07-17 17:16:17

+1

使用'getClass()。getResource(「1.jpg」)'顯然你會在單元格上獲得相同的圖像。你需要做一些動態! – elias 2012-07-17 17:59:07

+0

我是Java新手,所以我可能需要更多的幫助。 :D – 2012-07-17 18:09:57

回答

1

您可在圖像的名稱傳遞,當調用new ImageRenderer構造(read this)。

public class Movies extends javax.swing.JFrame { 
    public Movies() { 
     initComponents(); 
     table.getColumnModel().getColumn(1).setCellRenderer(new ImageRenderer("1.jpg")); 
     table.getColumnModel().getColumn(0).setCellRenderer(new ImageRenderer("2.jpg")); 
    } 
} 

class ImageRenderer extends DefaultTableCellRenderer { 
    ImageIcon icon = null;  

    ImageRenderer(String iconName) { 
     icon = new ImageIcon(getClass().getResource(iconName)); 
    } 
} 
+0

感謝Garrett Hall的幫助!我試圖在新的ImageRenderer中傳遞圖像的名稱,但只改變了第二列的圖像。當我添加了你告訴我的代碼時,這是一個變化的圖像。 http://oi48.tinypic.com/2d1o506.jpg是否有方法來指定JTable中單元格的imageIcon,例如,Column(2),Row(3)?也許我在這裏錯過了一些你可以幫助我的事情,因爲我在編程方面不是很有經驗。我基本上希望每個單元格都有獨特的圖像。 – 2012-07-18 23:39:15

+0

你將不得不做這裏描述的[這裏](http://objectmix.com/java/73143-setcellrenderer-specific-cell-jtable.html)。如果他們幫助你,你也可以upvote /接受答案:) – 2012-07-19 16:25:46

+0

感謝您的鏈接,我會回家看看它。我完全忘了接受上面的答案,所以在這裏。 :D – 2012-07-20 00:59:46

相關問題