2012-07-17 41 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

相关问题