java JTable中禁止单元格编辑状态、在单元格中显示图片

本文展示了如何使用Java的Swing库创建一个包含表格和图像渲染的简单应用程序,包括表格的基本设置、数据填充、图像图标显示以及表格单元格渲染。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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(){
			
		}
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值