gpt4 book ai didi

java - 为什么在表格单元格中显示路径而不是图标

转载 作者:行者123 更新时间:2023-11-29 07:54:08 24 4
gpt4 key购买 nike

我是 java-swing 的新手。我正在尝试在表格单元格中添加图标。但是当我在单元格中添加 ImageIcon 时,它只显示路径而不是图标。

这是我的代码。

 public void createGUI(ArrayList<String> params, String type) {

try {
DefaultTableModel model = new DefaultTableModel();
model.addColumn("ParameterName");
model.addColumn("ParameterType");
model.addColumn("Operation");
for (int i = 0; i < params.size() - 4; i++) {
String param_name = params.get(i).toString().substring(0, params.get(i).toString().indexOf("["));
String param_type = params.get(i).toString().substring(params.get(i).toString().indexOf("[") + 1, params.get(i).toString().indexOf("]"));
//URL url = ClassLoader.getSystemClassLoader().getResource("");
ImageIcon image = new ImageIcon("/com/soastreamer/resources/delete_idle.png");
// JLabel label = new JLabel(image);
model.addRow(new Object[]{param_name, param_type.toUpperCase(),image});

}


Action delete = new AbstractAction() {

public void actionPerformed(ActionEvent e) {
JTable table = (JTable) e.getSource();
int modelRow = Integer.valueOf(e.getActionCommand());
((DefaultTableModel) table.getModel()).removeRow(modelRow);
}
};

这里是为了清楚理解的图像。

enter image description here

请给我提示或任何引用。谢谢。

最佳答案

问题出在您的 TableModel 上,您必须告诉表格它必须在覆盖模型的 getColumnClass(int column) 方法的那一列中呈现图像。

看看这个answer由 camickr 提供。

更新

带有 ImageIcon 的 JTable 的最小示例,使用 DefaultTableModel 的渲染器来绘制它。我从 this answer 借用了 updateRowHeights() 代码再次通过 camickr,没有它,图标比行大并且没有完全显示。

这里重要的是,现在当渲染器调用 getColumnClass(1) 时,它会获取 ImageIcon.class,因此将执行渲染图标的代码。默认情况下,此方法将返回 Object.class 并且渲染器将忽略它是一个图标这一事实。

import java.awt.BorderLayout;
import java.awt.Component;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;

public class ImageIconTable
{
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new ImageIconTable().initGUI();
}
});
}

public void initGUI()
{
JFrame frame = new JFrame();
DefaultTableModel tableModel = new DefaultTableModel()
{
@Override
public Class getColumnClass(int column)
{
if (column == 1) return ImageIcon.class;
return Object.class;
}
};
tableModel.addColumn("Row 1");
tableModel.addColumn("Icons Row");
tableModel.addRow(new Object[]{"This cell is an Object", new ImageIcon("icon.jpg")});
_table = new JTable(tableModel);

updateRowHeights();

frame.add(new JScrollPane(_table), BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}

private void updateRowHeights()
{
try
{
for (int row = 0; row < _table.getRowCount(); row++)
{
int rowHeight = _table.getRowHeight();

for (int column = 0; column < _table.getColumnCount(); column++)
{
Component comp = _table.prepareRenderer(_table.getCellRenderer(row, column), row, column);
rowHeight = Math.max(rowHeight, comp.getPreferredSize().height);
}
_table.setRowHeight(row, rowHeight);
}
}
catch(ClassCastException e) {}
}

private JTable _table;
}

看起来像这样:

Table displaying an icon

关于java - 为什么在表格单元格中显示路径而不是图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19064166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com