簡體   English   中英

Java JTable在單元格中更改圖標

[英]Java JTable changing icon in cell

這已被問過一百萬次,但我今晚一定感覺特別密集,因為我還有麻煩。 我打電話的第一個問題就是這個

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"});

我看到圖標的文件名,但不是圖標本身。

1)你的ImageIcon可以放置( new ImageIcon(getClass().getResource("images/x.jpg"));

  • SRC

    • MyPackage的

        - MyClass.java 
    • MyPackage的/圖片

        - x.jpg 

更多Java 打包

2) JTable將Icon / ImageIcon知道為Object,然后在Renderer中沒有為Icon設置原因

要在項目中創建圖像文件夾,首先需要右鍵單擊項目,然后選擇“ Source Folder (而不是“文件夾”),然后將此源文件夾命名為images 現在,通過在File System移動,手動將圖像添加到此文件夾。 完成后,返回Eclipse, Refresh項目,您可以在Project Tree看到images Source Folder

現在,為了訪問圖像,請為您的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圖像 這是我的項目JTable項目的鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM