gpt4 book ai didi

java - 为什么我的 JTable 不允许我插入 ImageIcon?

转载 作者:行者123 更新时间:2023-12-02 02:57:38 25 4
gpt4 key购买 nike

非常简单,我在这里尝试遵循一些其他问题,了解如何修改 JTable 以获取 imageIcon。我的包中有一个名为 successIcon.png 的图像。

这是我的 JTable 的代码,大部分由 Net Beans 自动生成:

statusTable = new javax.swing.JTable();

statusTable.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {

},
new String [] {
"Icons", "Message"
}
) {
Class[] types = new Class [] {
javax.swing.ImageIcon.class, java.lang.String.class
};
boolean[] canEdit = new boolean [] {
false, false
};

public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}

public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});

我的一个按钮使用另一个 .java 文件中的静态命令:

  DBCommands.executeCommand(sqlArea.getSelectedText(), (DefaultTableModel) statusTable.getModel(), selectArea);

这是它调用的方法的方法签名。这个命令被称为罚款,我将其包括在内以防万一:

public static void executeCommand(String command, DefaultTableModel model, 
JTextArea selectArea){

该命令将其传递到一个名为 printStatus 的方法中,该方法应该更新 JTable,但它不起作用。首先,在图标下它会打印“successIcon.png”,但使用我当前的代码,它根本不会在其中放置任何内容:

public static void printStatus(String message, String command, PrintWriter statFileWriter, DefaultTableModel model){

Object[] row = new Object[2]; // so I can add row to table

ImageIcon icon = new ImageIcon("successIcon.png");

row[0] = icon;
row[1] = message + " (" + command + ")" + "\n";
model.addRow(row);
}

最佳答案

所以,我的快速令人讨厌的测试有效......

Working Images

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.table.DefaultTableModel;

public class Test {

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

public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}

JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}

public class TestPane extends JPanel {

private final JTable statusTable;

public TestPane() {
statusTable = new javax.swing.JTable();
statusTable.setRowHeight(200);

statusTable.setModel(new javax.swing.table.DefaultTableModel(
new Object[][]{},
new String[]{
"Icons", "Message"
}
) {
Class[] types = new Class[]{
javax.swing.ImageIcon.class, java.lang.String.class
};
boolean[] canEdit = new boolean[]{
false, false
};

public Class getColumnClass(int columnIndex) {
return types[columnIndex];
}

public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit[columnIndex];
}
});
setLayout(new BorderLayout());
add(new JScrollPane(statusTable));

JButton add = new JButton("Add");
add(add, BorderLayout.SOUTH);
add.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
DefaultTableModel model = (DefaultTableModel) statusTable.getModel();
Object[] row = new Object[2]; // so I can add row to table

ImageIcon icon = new ImageIcon("successIcon.jpg");

row[0] = icon;
row[1] = "Boo";
model.addRow(row);
}
});
}

}

}

卡维茨

  • successIcon.jpg 必须位于执行程序的同一目录中(也称为工作目录)

结论

  • 图像尚未加载。这可能是因为您认为图像所在的位置实际上并不是它所在的位置。我更喜欢使用 ImageIO.read 加载图像,因为它在图像完全加载后才会返回,如果找不到图像,它会抛出异常
  • 您应该使用嵌入式资源,而不是从磁盘加载资源。我建议这样做,因为程序的“工作”上下文可能会发生变化,并且并不总是与程序安装的位置相同
  • 您传递的 JTable 的引用与屏幕上的引用不同。考虑提供 runnable example这说明了你的问题。这不是代码转储,而是您正在执行的操作的示例,它突出显示了您遇到的问题。这将减少困惑并获得更好的响应

关于java - 为什么我的 JTable 不允许我插入 ImageIcon?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42850590/

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