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();

}

});

}

}

要更改Swing JTable单元格颜色,您可以使用JTable上的TableCellRenderer接口。这个接口允许您自定义单元格的呈现方式,包括单元格的背景和前景颜色。 下面是一个简单的例子,演示如何更改JTable单元格的颜色: ``` import java.awt.Color; import java.awt.Component; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableModel; public class JTableColorExample extends JFrame { public JTableColorExample() { // 创建表格模型和表格 DefaultTableModel model = new DefaultTableModel(new Object[][]{ {"A", 1}, {"B", 2}, {"C", 3}, {"D", 4} }, new Object[]{"Name", "Value"}); JTable table = new JTable(model); // 创建单元格渲染器 DefaultTableCellRenderer renderer = new DefaultTableCellRenderer() { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { // 调用父类的方法获取默认的单元格渲染组件 Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); // 如果值为奇数,设置背景为红色,否则为绿色 if ((Integer) value % 2 == 1) { c.setBackground(Color.RED); } else { c.setBackground(Color.GREEN); } return c; } }; // 设置单元格渲染器 table.setDefaultRenderer(Object.class, renderer); // 将表格添加到窗口中 add(new JScrollPane(table)); // 设置窗口属性并显示 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setLocationRelativeTo(null); setVisible(true); } public static void main(String[] args) { new JTableColorExample(); } } ``` 在这个例子中,我们创建了一个JTable,其中包含两列数据:名称和值。然后,我们创建了一个DefaultTableCellRenderer的子类,重写了getTableCellRendererComponent方法来更改单元格的背景颜色,使奇数单元格为红色,偶数单元格为绿色。最后,我们将此单元格渲染器设置为表格的默认单元格渲染器。 运行这个例子,您应该看到一个带有不同颜色单元格JTable
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值