我有一個Jtable允許編輯和插入。如何使Jtable禁止重複
編輯列時,可以說「ID」,我想檢查一下,如果插入的記錄或編輯後的記錄與其他記錄具有重複的「ID」列值。不允許。
實際上,具體而言,如果某人正在編輯ID列,當他點擊「Enter」或將焦點移至另一個單元格時,請執行檢查,如果ID重複,則不允許編輯。
我該怎麼做?
我有一個Jtable允許編輯和插入。如何使Jtable禁止重複
編輯列時,可以說「ID」,我想檢查一下,如果插入的記錄或編輯後的記錄與其他記錄具有重複的「ID」列值。不允許。
實際上,具體而言,如果某人正在編輯ID列,當他點擊「Enter」或將焦點移至另一個單元格時,請執行檢查,如果ID重複,則不允許編輯。
我該怎麼做?
如果有人正在編輯ID列,當他點擊「Enter」或將焦點移到另一個單元格時,執行檢查,如果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);
}
}
+1自定義'CellEditor'。數據模型可能拒絕重複,但用戶需要反饋。 – trashgod 2011-05-20 05:43:28
延伸DefaultTableModel
並覆蓋檢查重複的添加和更新方法,並將此類用於JTable
。
擴展AbstractTableModel
並安排它包含Set
,這排除了重複的元素。正如@camickr所建議的那樣,您需要custom cell editor來溝通結果失敗的添加。
Leon,在上面的評論中你有兩個很好的答案。 @Bala R和@trashgod - 創建答案讓Leon可以接受。 – CPerkins 2011-05-19 18:52:58