Swing之JTable篇在表单元格中增加文本输入框

来源:互联网 发布:手机淘宝价格走势软件 编辑:程序博客网 时间:2024/06/03 21:29
在JTable单元个中增加文本输入框是经常遇到的,一般在开发中会遇到在表格中对输入做控制就可以用到这种方法来实现
实现方式:
重写:TableCellRenderer接口
Component getTableCellRendererComponent(JTable table,
                                        Object value,
                                        boolean isSelected,
                                        boolean hasFocus,
                                        int row,
                                        int column)返回用于绘制单元格的组件。此方法用于在绘制前适当地配置渲染器。

参数:
table - 要求渲染器绘制的 JTable;可以为 null
value - 要呈现的单元格的值。由具体的渲染器解释和绘制该值。例如,如果 value 是字符串 "true",则它可呈现为字符串,或者也可呈现为已选中的复选框。null 是有效值
isSelected - 如果使用选中样式的突出显示来呈现该单元格,则为 true;否则为 false
hasFocus - 如果为 true,则适当地呈现单元格。例如,在单元格上放入特殊的边框,如果可以编辑该单元格,则以彩色呈现它,用于指示正在进行编辑
row - 要绘制的单元格的行索引。绘制头时,row 值是 -1
column - 要绘制的单元格的列索引
import com.jtextfield.test.UpperCaseField;   import java.awt.BorderLayout;   import java.awt.Color;   import java.awt.Component;     import javax.swing.JFrame;   import javax.swing.JScrollPane;   import javax.swing.JTable;   import javax.swing.JTextField;   import javax.swing.table.DefaultTableModel;   import javax.swing.table.TableCellRenderer;     public class EvenOddRowCellRenderer extends JFrame {     DefaultTableModel tmodel = new DefaultTableModel(new Object[][] { { "some", "text" },         { "any", "text" }, { "even", "more" }, { "text", "strings" }, { "and", "other" },         { "text", "values" } }, new Object[] { "Column 1", "Column 2" });         public EvenOddRowCellRenderer() {       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);       JTable table = new JTable(tmodel);       table.setDefaultRenderer(Object.class, new MyRenderer());       getContentPane().add(new JScrollPane(table), BorderLayout.CENTER);       pack();     }       public static void main(String arg[]) {       new EvenOddRowCellRenderer().setVisible(true);     }   }     class MyRenderer implements TableCellRenderer {     public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,         boolean hasFocus, int row, int column) {       UpperCaseField editor = new UpperCaseField(10);       if (value != null)         editor.setText(value.toString());       editor.setBackground((row % 2 == 0) ? Color.white : Color.cyan);       return editor;     }   }     import javax.swing.JTextField;   import javax.swing.text.AttributeSet;   import javax.swing.text.BadLocationException;   import javax.swing.text.Document;   import javax.swing.text.PlainDocument;     public class UpperCaseField extends JTextField {          public UpperCaseField(int cols) {            super(cols);        }          protected Document createDefaultModel() {            return new UpperCaseDocument();        }          static class UpperCaseDocument extends PlainDocument {              public void insertString(int offs, String str, AttributeSet a)                throws BadLocationException {                  if (str == null) {                    return;                }                  //此处用来控制输入                super.insertString(offs, str, a);            }        }    }