奇技淫巧 JTable放自定义组件

话不多说,放代码
主界面

import java.awt.BorderLayout;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.DefaultCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableColumnModel;

public class MainWindow extends JFrame{
    public MainWindow()
    {
        super();
        setBounds(100,100,300,300);
        setTitle("JTable Example");
        String[] column = {"JCheckBox"};
        Object[][] row = new Object[5][1];

        JTable t = new JTable(row,column);
        t.setRowHeight(70);
        TableColumnModel tcm = t.getColumnModel();
        tcm.getColumn(0).setCellEditor(new DefaultCellEditor(new JCheckBox()));
        tcm.getColumn(0).setCellRenderer(new MyCellRenderer());
        for (int i = 0; i < t.getRowCount(); ++i)
            t.setValueAt(false,i,0);
        t.setValueAt(true, 0, 0);
        JScrollPane scroll = new JScrollPane(t);
        t.addMouseListener(new MouseAdapter()
                {
                    public void mouseClicked(MouseEvent e)
                    {
                        if (e.getClickCount() == 1)
                        {
                            int columnIntex = t.columnAtPoint(e.getPoint());
                            int rowIntex = t.rowAtPoint(e.getPoint());
                            if (columnIntex == 0)
                            {
                                for (int i = 0; i < t.getRowCount(); ++i)
                                    t.setValueAt(false, i, 0);
                                t.setValueAt(true, rowIntex, columnIntex);
                            }
                        }
                    }
                });
        this.getContentPane().add(scroll,BorderLayout.CENTER);
    }
}

表格渲染器

import java.awt.Component;
import java.awt.FlowLayout;

import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.table.TableCellRenderer;

public class MyCellRenderer extends JCheckBox implements TableCellRenderer{
        private static JLabel text  = new JLabel();// set the text you want
        private static JPanel p = new JPanel(); //set the layout of table cell
    /*设为static是为了应付JInternalFrame类子窗口,系列要释放资源是为不打开多窗口时重复,可去掉亲身体验*/
        @Override
        public Component getTableCellRendererComponent(JTable arg0, Object arg1, boolean arg2, boolean arg3, int arg4,
                int arg5) {
            // TODO Auto-generated method stub
            p = null;
            text = null;
            p = new JPanel();
            text = new JLabel();
            boolean set = (Boolean)arg1;
            this.setSelected(set);
            if (this.isSelected())
                text.setText("已选中");
            else
                text.setText("未选中");
            p.setLayout(new FlowLayout(FlowLayout.CENTER));
            p.add(this);
            p.add(text);
            return p;
        }

}

Main

public class Main {
    public static void main(String[] args) 
    {
        MainWindow w = new MainWindow();
        w.setVisible(true);
    }
}

效果:

这里写图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值