java - 我的联系人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);
解决方案
我不知道你的“特殊”问题是什么,没有足够的上下文来确定你可能在哪里遇到问题,但是,我怀疑你没有覆盖 的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
包中
推荐阅读
- javascript - 管理在 div 行内动态生成的元素的 onclick 事件
- intel - 如何使用python、realsense SDK获取相机和物体之间的角度
- jtable - 如何将以前输入的数据保持在 Jtables 中
- intellij-idea - Intellij 中的配置文件
- python-3.x - Qt3DWindow:初始化后将实体添加到根实体
- angular - TypeError:在 Angular 6 prod 构建后 c.push 未定义
- android - 在谷歌地图的圆圈下画虚线
- android - 在 Android 上,用户何时可以真正看到 Delphi 表单?
- specflow - BeforeScenarioOutline 或 AfterScenarioOutline 是否存在?
- python-3.x - 如何使用来自 GPU 的 panda 数据帧读取 csv 文件?