【问题标题】:Image display in JTable cellJTable 单元格中的图像显示
【发布时间】:2012-02-09 11:33:38
【问题描述】:

我使用以下程序使用 java 类创建 JTable。如果我从选项窗格中获取 warnIcon、infoIcon 的图像,它会正确显示。但是,如果我从我的系统中添加图像,它不会显示在表格中。显示一个空白区域而不是我的图像。如何从该表中的文件(例如 A.jpg)中绘制图像?

package pointer;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.*;
import javax.swing.plaf.OptionPaneUI;
import javax.swing.table.*;
import sun.swing.ImageIconUIResource;

public class TableIcon1 extends JFrame  {
    private JTable table;
    private int pHeight = 60;
       public TableIcon1() {
           ImageIcon testIcon = new ImageIcon("A.jpg");
          // ImageIcon errorIcon = (ImageIcon) UIManager.getIcon("OptionPane.errorIcon");
           ImageIcon infoIcon = (ImageIcon) UIManager.getIcon("OptionPane.informationIcon");
           ImageIcon warnIcon = (ImageIcon) UIManager.getIcon("OptionPane.warningIcon");
           String[] columnNames = {"Picture", "Description"};
           Object[][] data = {{testIcon  , "About"}, {infoIcon, "Add"}, {warnIcon, "Copy"},};
           DefaultTableModel model = new DefaultTableModel(data, columnNames);
           table = new JTable(model) {
            @Override
            public Class getColumnClass(int column) {
                return getValueAt(2, column).getClass();
            }
          };
           table.setRowHeight(pHeight);
           table.setPreferredScrollableViewportSize(table.getPreferredSize());
           JScrollPane scrollPane = new JScrollPane(table);
           add(scrollPane, BorderLayout.CENTER);
         }

    public static void main(String[] args) {
        TableIcon1 frame = new TableIcon1();
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.setLocation(150, 150);
        frame.pack();
        frame.setVisible(true);
    }
}

【问题讨论】:

  • 为什么您显示的是来自本地文件系统的File?如果是应用资源,应该是通过URL获取的(放入Jar,添加到运行时的class-path &)。如果它是“用户资源”,则向用户提供JFileChooser,您将得到一个带有完整路径和名称的File 对象。无论哪种方式都可以解决这个问题。其他几点: 1) 不要扩展JFrame。更喜欢组合而不是继承。 2) 在 EDT 上构建 GUI。 3)setLocationByPlatform(true)优于setLocation(150, 150)
  • @AndrewThompson 如何在此示例中为 testicon 添加 JFilechooser
  • 阅读How to Use File Choosers后,何不尽最大努力?如果您遇到困难,请提出具体问题。顺便说一句 - 不要以为我能读懂你的想法。您的问题是否意味着图像 不是 mKorbel 假设的应用程序资源? (通常,更多信息总比更少信息好。)
  • @javalearner : 你的图片文件夹在哪里?
  • URL url = getClass().getResource("image/Pointer.GIF"); ImageIcon testIcon = new ImageIcon(url);它工作正常

标签: java swing icons jtable imageicon


【解决方案1】:
ImageIcon testIcon = new ImageIcon("A.jpg"); is road to nowhere

图标很常见,永远不会为错误的路径或空值返回任何异常,您必须对此进行测试

最好的方法是在您的 Java project 中创建一个名为 icons 的新文件夹,然后复制您的 A.jpg Icon

那你只能打电话了

URL url = ClassLoader.getSystemClassLoader().getResource("icons/A.jpg");
ImageIcon testIcon = new ImageIcon(url);

【讨论】:

  • -1 我知道糟糕的 systemClassLoader 会再次冒泡——很有可能是 ;-)
  • URL url = ClassLoader.getSystemClassLoader().getResource("icons/A.jpg"); ImageIcon testIcon = new ImageIcon(url);我有空指针异常。如何解决?
  • @mKorbel :是的,“kleopatra”曾经向我展示过一个很棒的文档,太真实了试试这个链接,为什么我们必须使用 getClass().getResource() 而不是 ClassLoaders 东西Application Resources + 1 :-) 问候
  • @Gagandeep Bali 谢谢,但没有人说服我接受匡威,简单接受,
  • @mKorbel :在这里检查这一行,“所有类加载器将首先搜索资源作为系统资源,其方式类似于搜索类文件。”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多