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

在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);   
         }   
     }   
 }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值