java jtable 双击事件_如何禁用JTable单元格上的鼠标点击事件?

只需在该列上设置特定的单元格编辑器,该编辑器将不允许输入不正确的字符。而且可以肯定,我也会通过重写适当setValueAt(Object, int, int)验证框输入TableModel:

下面是一个例子,它只允许字符从A到Z和a到z:

import java.awt.BorderLayout;

import java.util.Vector;

import javax.swing.DefaultCellEditor;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTable;

import javax.swing.JTextField;

import javax.swing.SwingUtilities;

import javax.swing.UIManager;

import javax.swing.UnsupportedLookAndFeelException;

import javax.swing.table.DefaultTableModel;

import javax.swing.text.AttributeSet;

import javax.swing.text.BadLocationException;

import javax.swing.text.DocumentFilter;

import javax.swing.text.PlainDocument;

public class TestTable {

private static final String ALPHA_ONLY_REGEXP = "\\p{Alpha}*";

private static final String NONALPHA_REGEXP = "[^\\p{Alpha}]+";

private int ALPHA_ONLY_COLUMN_INDEX = 2;

protected String validateAndFixString(String string) {

if (!string.matches(ALPHA_ONLY_REGEXP)) {

string = string.replaceAll(NONALPHA_REGEXP, "");

}

return string;

}

protected void initUI() {

final DefaultTableModel model = new DefaultTableModel() {

@Override

public void setValueAt(Object aValue, int row, int column) {

if (column == ALPHA_ONLY_COLUMN_INDEX) {

if (aValue != null) {

aValue = validateAndFixString((String) aValue);

}

}

super.setValueAt(aValue, row, column);

}

};

for (int i = 0; i < 5; i++) {

model.addColumn("Col-" + (i + 1));

}

for (int i = 0; i < 200; i++) {

Vector row = new Vector();

for (int j = 0; j < 5; j++) {

if (j == ALPHA_ONLY_COLUMN_INDEX) {

row.add("AlphabetOnly");

}

row.add("New cell - " + (j + 1));

}

model.addRow(row);

}

JTable table = new JTable(model);

JTextField alphaOnly = new JTextField();

((PlainDocument) alphaOnly.getDocument()).setDocumentFilter(new DocumentFilter() {

@Override

public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {

string = validateAndFixString(string);

super.insertString(fb, offset, string, attr);

}

@Override

public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {

text = validateAndFixString(text);

super.replace(fb, offset, length, text, attrs);

}

});

table.getColumnModel().getColumn(ALPHA_ONLY_COLUMN_INDEX).setCellEditor(new DefaultCellEditor(alphaOnly));

JFrame frame = new JFrame(TestTable.class.getSimpleName());

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JScrollPane scrollpane = new JScrollPane(table);

frame.add(scrollpane, BorderLayout.CENTER);

frame.pack();

frame.setVisible(true);

}

public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException,

UnsupportedLookAndFeelException {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

SwingUtilities.invokeLater(new Runnable() {

@Override

public void run() {

new TestTable().initUI();

}

});

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值