我有一个Jtable允许编辑和插入。
当编辑列时,让我们说“ID”,我想要检查,如果插入的记录或编辑后的记录与其他记录有重复的“ID”列值。这是不允许的。
实际上,具体来说,如果某人正在编辑ID列,当他点击“Enter”或将焦点移动到另一个单元格时,执行检查,如果ID重复,则禁止该版本。
我该怎么做?
答案 0 :(得分:1)
扩展DefaultTableModel
并覆盖检查重复的添加和更新方法,并将此类用于JTable
。
答案 1 :(得分:1)
如果有人正在编辑ID列,当他点击“Enter”或将焦点移动到另一个单元格时,执行检查,如果ID重复,则禁止该版本。
创建自定义编辑器以在将ID保存到模型之前验证该ID。这是一个简单的例子来启动你的目标:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.event.*;
import javax.swing.border.*;
import javax.swing.table.*;
public class TableEdit extends JFrame
{
TableEdit()
{
JTable table = new JTable(5,5);
table.setPreferredScrollableViewportSize(table.getPreferredSize());
JScrollPane scrollpane = new JScrollPane(table);
getContentPane().add(scrollpane);
// Use a custom editor
TableCellEditor fce = new FiveCharacterEditor();
table.setDefaultEditor(Object.class, fce);
}
class FiveCharacterEditor extends DefaultCellEditor
{
FiveCharacterEditor()
{
super( new JTextField() );
}
public boolean stopCellEditing()
{
try
{
String editingValue = (String)getCellEditorValue();
if(editingValue.length() != 5)
{
JTextField textField = (JTextField)getComponent();
textField.setBorder(new LineBorder(Color.red));
textField.selectAll();
textField.requestFocusInWindow();
JOptionPane.showMessageDialog(
null,
"Please enter string with 5 letters.",
"Alert!",JOptionPane.ERROR_MESSAGE);
return false;
}
}
catch(ClassCastException exception)
{
return false;
}
return super.stopCellEditing();
}
public Component getTableCellEditorComponent(
JTable table, Object value, boolean isSelected, int row, int column)
{
Component c = super.getTableCellEditorComponent(
table, value, isSelected, row, column);
((JComponent)c).setBorder(new LineBorder(Color.black));
return c;
}
}
public static void main(String [] args)
{
JFrame frame = new TableEdit();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo( null );
frame.setVisible(true);
}
}
答案 2 :(得分:1)
扩展AbstractTableModel
并安排它包含Set
,以排除重复元素。正如@camickr所建议的那样,您需要custom cell editor来传达结果失败的添加内容。