package testtable;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Image;
import javax.swing.DefaultListCellRenderer;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class tabletest extends JFrame {
private JPanel contentPane;
private JTable table;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
tabletest frame = new tabletest();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public tabletest() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JScrollPane scrollPane = new JScrollPane();
contentPane.add(scrollPane, BorderLayout.NORTH);
//table = new JTable();
String[] columnNames = { "French", "Spanish", "Italian" };
ImageIcon image = new ImageIcon("/home/cwll/icon-tux.png");
Object[][] tableData = {{"un", "uno", image },
{"deux", "dos", image },
{"trois", "tres", image },
{ "quatre", "cuatro", "quattro"},
{ "cinq", "cinco", "cinque" },
{ "six", "seis", "sei" },
{ "sept", "siete", "sette" } };
table = new JTable(tableData,columnNames);
contentPane.add(table, BorderLayout.CENTER);
ImageTableCellRenderer renderer = new ImageTableCellRenderer();
table.setDefaultRenderer(Object.class, renderer);
DefaultTableModel model = new noEditTableModel(tableData, columnNames);
table.setModel(model);
}
class noEditTableModel extends DefaultTableModel {
public noEditTableModel(Object[][] data, Object[] columnNames) {
super(data, columnNames);// 这里一定要覆盖父类的构造方法,否则不能实例myTableModel
}
public boolean isCellEditable(int row, int column) {
return false;// 父类的方法里面是 return true的,所以就可以编辑了~~~
}
}
class ImageTableCellRenderer extends DefaultTableCellRenderer{
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column){
DefaultTableCellRenderer defaultRenderer=new DefaultTableCellRenderer();
JLabel renderer=(JLabel)defaultRenderer.getTableCellRendererComponent(table, value,isSelected,
hasFocus, row, column);
if(value instanceof ImageIcon){
renderer.setIcon((ImageIcon) value);
renderer.setText("");//这里可以设置同时显示图片和文字
}
return renderer;
}
public ImageTableCellRenderer(){
}
}
}
java JTable中禁止单元格编辑状态、在单元格中显示图片
最新推荐文章于 2023-08-14 17:25:39 发布