首页 > 解决方案 > 我的联系人Form.java,登录时没有出现表格中的图片行

问题描述

怎么办:java&Netbeans, MySQL这个数组在Form的Jtable中显示Contacts Information 用账号登录的时候

表格

ContactQuery cq=new ContactQuery(); 
ArrayList<Contact> ctList=cq.contactList();
//`id`, `fname`, `lname`, `groupc`, `phone`, `email`, `address`, `picture`
String[] colNames={"Id","First Name ","Last Name","Group","Phone","Email","Address","Picture"};
Object[][] rows=new Object [ctList.size()][8];
    
for(int i=0;i<ctList.size();i++)
{
    rows[i][0]=ctList.get(i).getId();
    rows[i][1]=ctList.get(i).getFname();
    rows[i][2]=ctList.get(i).getLname();
    rows[i][3]=ctList.get(i).getGroupc();
    rows[i][4]=ctList.get(i).getPhone();
    rows[i][5]=ctList.get(i).getEmail();
    rows[i][6]=ctList.get(i).getAddress();
    
// this show only the (javax.swing.ImageIcon)not the image :What should i do here ?
ImageIcon pic= new ImageIcon(new ImageIcon(ctList.get(i).getPicture()).getImage().getScaledInstance(150, 100, Image.SCALE_SMOOTH));
     rows[i][7]=pic;
     
  }
MyModel mmd=new MyModel(rows, colNames);
jTable1.setModel(mmd);
jTable1.setRowHeight(100);
jTable1.getColumnModel().getColumn(7).setPreferredWidth(150);

标签: javamysqlarrays

解决方案


我不知道你的“特殊”问题是什么,没有足够的上下文来确定你可能在哪里遇到问题,但是,我怀疑你没有覆盖 的getColumnClass方法AbstractTableModel,所以它不知道它应该如何处理ImageIcon

快乐的

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.util.ArrayList;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

public class Main {

    public static void main(String[] args) {
        new Main();
    }

    public Main() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        public TestPane() {
            setLayout(new BorderLayout());

            List<AnimalItem> items = new ArrayList<>(25);
            items.add(new AnimalItem("Bear", new ImageIcon(getClass().getResource("/images/Bear.png"))));
            items.add(new AnimalItem("Kitty", new ImageIcon(getClass().getResource("/images/Cat.png"))));
            items.add(new AnimalItem("Doggy", new ImageIcon(getClass().getResource("/images/Doggy.png"))));
            items.add(new AnimalItem("Foxy", new ImageIcon(getClass().getResource("/images/Fox.png"))));
            items.add(new AnimalItem("Drop bear", new ImageIcon(getClass().getResource("/images/Koala.png"))));
            items.add(new AnimalItem("Lion", new ImageIcon(getClass().getResource("/images/Lion.png"))));
            items.add(new AnimalItem("Piggy", new ImageIcon(getClass().getResource("/images/Pig.png"))));
            items.add(new AnimalItem("Bunny", new ImageIcon(getClass().getResource("/images/Rabbit.png"))));
            items.add(new AnimalItem("Raccon", new ImageIcon(getClass().getResource("/images/Raccon.png"))));

            AnimalTableModel tableModel = new AnimalTableModel(items);
            JTable table = new JTable(tableModel);
            table.setRowHeight(64);
            add(new JScrollPane(table));
        }

    }

    public class AnimalItem {

        private String name;
        private ImageIcon image;

        public String getName() {
            return name;
        }

        public ImageIcon getImage() {
            return image;
        }

        public AnimalItem(String name, ImageIcon image) {
            this.name = name;
            this.image = image;
        }

    }

    public class AnimalTableModel extends AbstractTableModel {

        private List<AnimalItem> items;
        private String[] columnNames = new String[]{
            "Name",
            "Image"
        };

        public AnimalTableModel(List<AnimalItem> items) {
            this.items = items;
        }

        public void setItems(List<AnimalItem> items) {
            this.items = items;
        }

        @Override
        public int getRowCount() {
            return items.size();
        }

        @Override
        public int getColumnCount() {
            return columnNames.length;
        }

        @Override
        public String getColumnName(int column) {
            return columnNames[column];
        }

        @Override
        public Class<?> getColumnClass(int columnIndex) {
            switch (columnIndex) {
                case 0: return String.class;
                case 1: return ImageIcon.class;
            }

            return String.class;
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            AnimalItem item = items.get(rowIndex);
            switch (columnIndex) {
                case 0:
                    return item.getName();
                case 1:
                    return item.getImage();
            }
            return null;
        }
    }
}

注意:图像是直接从应用程序上下文加载的(即它们是嵌入的),因此您需要提供自己的图像并且它们需要在/images包中


推荐阅读