这已被问过一百万次了,但我今晚一定感觉特别密集因为我还有麻烦。我的第一个问题是,当我致电
时ImageIcon icon = new ImageIcon(getClass().getResource("images/x.jpg"));
在哪里寻找图片文件夹?我试过在我的项目下和src下创建一个文件夹。我错过了什么?我正在使用Eclipse。正如您可能已经猜到的那样,我没有做太多的Java。
我真正想要做的是将表格中的第一列设置为初始图标,然后允许用户双击它并更改图标。有人可以这么温柔地朝正确的方向轻轻推动(或猛烈地推)我吗?我需要自己的渲染器类吗?
class MyRenderer extends DefaultTableCellRenderer {
....
当有人双击该行时,我想将图标更改为y.jpg。
被修改 谢谢您的帮助。另一个愚蠢的问题当我添加这样的行时,我应该看到图标吗?
DefaultTableModel dm = (DefaultTableModel)tblNews.getModel();
ImageIcon icon = new ImageIcon(getClass().getResource("/x.jpg"));
dm.addRow(new Object[]{icon, "Text"});
我看到了图标的文件名,但没有看到图标本身。
答案 0 :(得分:3)
1)您的ImageIcon可以放置
(new ImageIcon(getClass().getResource("images/x.jpg"));
)
的src
MyPackage的
- MyClass.java
MyPackage的/图像
- x.jpg
Java中的Packaging更多
2)JTable knows Icon / ImageIcon作为对象,然后在渲染器中没有为Icon设置原因
答案 1 :(得分:3)
要在项目中创建图像文件夹,首先需要右键单击项目,然后选择Source Folder
(不是文件夹),然后将此源文件夹命名为images
。现在,通过移动File System
手动将图像添加到此文件夹。完成后,返回Eclipse,Refresh
您的项目,您可以在images
中看到Source Folder
Project Tree
。
现在,为了访问图片,请为ImageIcon
:
ImageIcon icon = new ImageIcon(getClass().getResource("/x.jpg"));
请记住images Source Folder
内实际图像之前的第一个正斜线。现在运行您的项目并检查bin folder
,您的图片将自动添加到此区域。
试试这段代码,我测试了它,它完美无瑕。我也可以使用此代码在JTable中看到图像。
package jtable;
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class TableIcon extends JFrame
{
public TableIcon()
{
ImageIcon backIcon = getImage("/images/bac.png");
ImageIcon exitIcon = getImage("/images/exit.png");
ImageIcon forwardIcon = getImage("/images/forward.png");
String[] columnNames = {"Picture", "Description"};
Object[][] data =
{
{backIcon, "BACK"},
{exitIcon, "EXIT"},
{forwardIcon, "FORWARD"},
};
DefaultTableModel model = new DefaultTableModel(data, columnNames);
JTable table = new JTable( model )
{
// Returning the Class of each column will allow different
// renderers to be used based on Class
public Class getColumnClass(int column)
{
return getValueAt(0, column).getClass();
}
};
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scrollPane = new JScrollPane( table );
getContentPane().add( scrollPane );
}
private ImageIcon getImage(String path)
{
java.net.URL url = getClass().getResource(path);
if (url != null)
return (new ImageIcon(url));
else
{
System.out.println(url);
return null;
}
}
public static void main(String[] args)
{
TableIcon frame = new TableIcon();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setVisible(true);
}
}
这是输出:
以下是我的项目JTable Project
的链接