Java JTable изменяющий значок в ячейке - PullRequest
3 голосов
/ 13 февраля 2012

Об этом спрашивают миллион раз, но я, должно быть, чувствую себя особенно плотно сегодня вечером, потому что у меня все еще проблемы. Мой первый вопрос: когда я звоню

ImageIcon icon = new ImageIcon(getClass().getResource("images/x.jpg"));

где он ищет папку с изображениями? Я попытался сделать это папкой под моим проектом и под src. Что мне не хватает? Я использую Затмение. Как вы уже, наверное, догадались, я не очень много делал на Java.

Что я действительно хочу сделать, так это установить в первом столбце таблицы начальный значок, а затем позволить пользователю дважды щелкнуть по нему и изменить значок. Может ли кто-то быть таким добрым, чтобы мягко толкнуть (или сильно толкнуть) меня в правильном направлении? Нужен ли мне мой собственный класс рендерера?

class MyRenderer extends DefaultTableCellRenderer {
....

Когда кто-то дважды щелкает по строке, я хочу изменить значок на y.jpg.

1012 * Отредактировано * Спасибо за помощь. Еще один тупой вопрос. Должен ли я видеть значок, когда добавляю строку, подобную этой?

DefaultTableModel dm = (DefaultTableModel)tblNews.getModel();
ImageIcon icon = new ImageIcon(getClass().getResource("/x.jpg"));
dm.addRow(new Object[]{icon, "Text"});

Я вижу имя файла иконки, но не сам значок.

Ответы [ 2 ]

3 голосов
/ 13 февраля 2012

Чтобы создать папку изображений в вашем проекте, вам нужно сначала щелкнуть правой кнопкой мыши ваш проект, а затем выбрать 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 Image и вот ссылка на мой проект JTable Project

3 голосов
/ 13 февраля 2012

1) ваш ImageIcon может быть размещен для (new ImageIcon(getClass().getResource("images/x.jpg"));)

  • ЦСИ

    • MyPackage

           - MyClass.java
      
    • MyPackage / изображения

                 - x.jpg
      

больше Упаковка на Java

2) JTable знает Icon / ImageIcon как Объект, тогда нет никакой причины для Icon в Renderer

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...