“设置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); } }
- 一个牛人写的“设置jtable单元格颜色,以及jtable中实现复选框”的程序,备忘
- “设置jtable单元格颜色,以及jtable中实现复选框”的程序
- jTable 中单元格的颜色设置
- jtable设置某一个单元格的颜色
- JTable 表格设置某一单元格的颜色
- jTable设置单个单元格颜色
- 设置JTable某个单元格的背景颜色和前景颜色
- (Swing) 在JTable中实现复选框
- java中JTable单元格中放复选框
- 设置java中JTable单元格指定文字颜色
- JTable操作 关于单元格颜色设置
- JTable操作 关于单元格颜色设置
- 修改JTable中任意单元格颜色
- 带复选框的JTable
- 设置JTable每行的颜色
- 设置一个JTable中某些单元格的背景色
- 设置一个JTable中某些单元格的背景色
- 怎么样设置JTable某个单元格的背景颜色和前景颜色
- php 数组操作大全
- MFC字体设置,实现字体旋转的方法
- How to Make a Single Page Website
- RTEMS 应用程序的初始化过程分析
- 第九章 顺序容器
- “设置jtable单元格颜色,以及jtable中实现复选框”的程序
- 记录程序崩溃时的调用堆栈
- flex datagrid
- 介绍memcache的安装
- 适配器模式
- 5.2滤波电路
- VC项目工程配置
- 广义特征值
- warning C6031: Return value ignored: 'GetLastError'