“设置jtable单元格颜色,以及jtable中实现复选框”的程序

来源:互联网 发布:java qq登录 编辑:程序博客网 时间:2024/05/02 05:02

TableCellRenderer就是用来绘制展示当前cell单元数值内容的,你可以用文字、数值或者图片来表示内容,当然最强大展示方式的就是通过自定义自己的renderer组件,通过Java2D来绘制各种天花乱坠的效果。

TableCellEditor主要是用来当用户点击在具体cell时进行编辑的组件,所以TableCellEditor除了具有TableCellRenderer一样的绘制功能外还可以进行交互动作,例如在cell上出现下拉框、勾选框甚至通过按钮弹出更复杂的对话框让用户进行输入编辑。

他们都是JPanel的子类

public Component getTableCellEditorComponent(JTable arg0, Object arg1,boolean arg2, int arg3, int arg4) {// TODO Auto-generated method stubreturn null;}


TableCellEditor主要方法 this

如果添加JButton 都是在这个基础的JComponent上面添加的组件

TableCellRenderer也是类似

------------------------------------------------

import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.*;//主类//@SuppressWarnings("unchecked")public class TryJTable extends JFrame {private static final long serialVersionUID = 1L;//创建自定义表格模型对象MyTableModel dtm=new MyTableModel();//创建JTable对象JTable jt=new JTable(dtm);//将JTable封装进滚动窗格JScrollPane jsp=new JScrollPane(jt); //自定义的表格模型private class MyTableModel extends AbstractTableModel{private static final long serialVersionUID = 1L;//创建表示各个列类型的类型数组Class[] typeArray={Object.class,Double.class,Boolean.class,Icon.class,Color.class};//创建列标题字符串数组String[] head={"Object","Number","Boolean","Icon","Color"};//创建初始表格数据Object[][] data={{"这里是字符串1",new Integer(20),new Boolean(true),new ImageIcon("D:/p1.gif "),Color.black},{"这里是字符串2",new Double(12.34),new Boolean(false),new ImageIcon("D:/p2.gif "),Color.darkGray},{"这里是字符串3",new Integer(125),new Boolean(true),new ImageIcon("D:/p3.gif"),Color.white}};//重写getColumnCount方法public int getColumnCount(){return head.length;}//重写getRowCount方法 public int getRowCount(){return data.length;}//重写getColumnName方法public String getColumnName(int col){return head[col];}//重写getValueAt方法public Object getValueAt(int r,int c){return data[r][c];}//重写getColumnClass方法public Class getColumnClass(int c){return typeArray[c];}//重写isCellEditable方法public boolean isCellEditable(int r,int c){return true;}//重写setValueAt方法public void setValueAt(Object value,int r,int c){data[r][c]=value;//this.fireTableCellUpdated(r,c);}}//自定义的绘制器private class MyCellRendererForColorClass extends JLabel implements TableCellRenderer{private static final long serialVersionUID = 1L;//定义构造器public MyCellRendererForColorClass (){//设置标签为不透明状态this.setOpaque(true);//设置标签的文本对齐方式为居中this.setHorizontalAlignment(JLabel.CENTER);}//实现获取呈现控件的getTableCellRendererComponent方法public Component getTableCellRendererComponent(JTable table,Object value,boolean isSelected,boolean hasFocus,int row,int column){ //获取要呈现的颜色Color c=(Color)value;//根据参数value设置背景色this.setBackground(c);//设置前景色为背景色反色this.setForeground(new Color(255-c.getRed(),255-c.getGreen(),255-c.getBlue()));//设置标签中显示RGB的值this.setText("["+c.getRed()+","+c.getGreen()+","+c.getBlue()+"]");//将自己返回return this; }} //声明Color类型的自定义编辑器class MyEditorForColorClass extends AbstractCellEditor implements TableCellEditor,ActionListener{private static final long serialVersionUID = 1L;//定义Color变量Color c;//定义对话框变量JDialog jd;//创建一个按扭JButton jb=new JButton();//创建JColorChooser对象JColorChooser jcc=new JColorChooser();//声明一个常量public static final String EDIT="edit";//定义构造器public MyEditorForColorClass(){//为按扭注册监听器jb.addActionListener(this);//设置此按扭的动作命令jb.setActionCommand(EDIT);//获取颜色选择器jd=JColorChooser.createDialog(jb,"选择颜色",true,jcc,this,null);}//实现actionPerformed方法public void actionPerformed(ActionEvent e){//测试获得的动作命令是否等于EDIT常量if(e.getActionCommand().equals(EDIT)){//设置按扭的背景颜色jb.setBackground(c);//设置前景色为背景色反色jb.setForeground(new Color(255-c.getRed(),255-c.getGreen(),255-c.getBlue()));//设置按钮中显示RGB的值jb.setText("["+c.getRed()+","+c.getGreen()+","+c.getBlue()+"]");//设置颜色选择器的颜色jcc.setColor(c);//设置颜色选择器可见jd.setVisible(true);//通知所有监听器,以延迟方式创建事件对象this.fireEditingStopped(); }else{//获取颜色c=jcc.getColor();}}//定义getCellEditorValue方法返回颜色值public Object getCellEditorValue(){return c; }//重写getTableCellEditorComponent方法public Component getTableCellEditorComponent(JTable table,Object value,boolean isSelected,int row,int column){c=(Color)value;return jb; }}//声明Icon类型的自定义编辑器class MyEditorForIconClass extends AbstractCellEditor implements TableCellEditor,ActionListener{private static final long serialVersionUID = 1L;//定义Icon变量Icon icon;//创建一个按扭JButton jb=new JButton();//创建JColorChooser对象JFileChooser jfc=new JFileChooser();//声明一个常量public static final String EDIT="edit";//定义构造器public MyEditorForIconClass(){//为按扭注册监听器jb.addActionListener(this);//设置此按扭的动作命令jb.setActionCommand(EDIT);}//实现actionPerformed方法public void actionPerformed(ActionEvent e){//测试获得的动作命令是否等于EDIT常量if(e.getActionCommand().equals(EDIT)){//设置按扭的图标jb.setIcon(icon);//显示文件选择器对话框jfc.showOpenDialog(jb);//获取新图片if(jfc.getSelectedFile()!=null){icon=new ImageIcon(jfc.getSelectedFile().getAbsolutePath());} //通知所有监听器,以延迟方式创建事件对象this.fireEditingStopped(); }}//定义getCellEditorValue方法返回图标public Object getCellEditorValue(){return icon; }//重写getTableCellEditorComponent方法public Component getTableCellEditorComponent(JTable table,Object value,boolean isSelected,int row,int column){icon=(Icon)value;return jb; }} 


 

下面这一篇是来自CSDN博客,转载请标明出处 :http://blog.csdn.net/wzh32/article/details/4141451

import java.awt.*; import javax.swing.*; import javax.swing.table.*; public class RoundColorTable extends JFrame{ private String[] colname = {"第1列","第2列","第3列","第4列","第5列"}; //表头信息 private String[][] data = new String[10][5]; //表内容 private JTable table; public RoundColorTable() { //表内容赋值 for(int i = 0; i < 10; i++) { for(int j = 0; j < 5; j++) { data[i][j] = "( " + (j+1) + ", " + (i+1) + " )"; } } table = new JTable(new DefaultTableModel(data,colname)); TableCellRenderer tcr = new ColorTableCellRenderer(); table.setDefaultRenderer(Object.class,tcr);//为JTable增加渲染器,因为是针对于表格中的所有单元格,所有用Object.classadd(new JScrollPane(table),BorderLayout.CENTER); setVisible(true); setSize(500,300); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String args[]) { new RoundColorTable(); } } class ColorTableCellRenderer extends DefaultTableCellRenderer { DefaultTableCellRenderer renderer=new DefaultTableCellRenderer(); public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if(row%2 == 0){ //调用基类方法 return super.getTableCellRendererComponent(table, value, isSelected,hasFocus, row, column);} else{ return renderer.getTableCellRendererComponent(table, value, isSelected,hasFocus, row, column);} } //该类继承与JLabel,Graphics用于绘制单元格,绘制红线 public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2=(Graphics2D)g; final BasicStroke stroke=new BasicStroke(2.0f); g2.setColor(Color.RED); g2.setStroke(stroke); g2.drawLine(0,getHeight()/2,getWidth(),getHeight()/2); } }


原创粉丝点击