话不多说,放代码
主界面
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);
}
}
效果: