java – 如何将JTable单元格输入标记为无效?
发布时间:2020-12-14 05:28:19 所属栏目:Java 来源:网络整理
导读:如果我使用JTable并在其模型上指定列的classtype,如下所示: DefaultTableModel model = new DefaultTableModel(columnNames,100) { @Override public Class? getColumnClass(int columnIndex) { return Integer.class; }}; 然后,每当用户尝试在表中输入双重
|
如果我使用JTable并在其模型上指定列的classtype,如下所示:
DefaultTableModel model = new DefaultTableModel(columnNames,100) {
@Override
public Class<?> getColumnClass(int columnIndex) {
return Integer.class;
}};
然后,每当用户尝试在表中输入双重值时,Swing会自动拒绝输入,并将单元格的轮廓设置为红色. 当有人向单元格输入“负或0”输入时,我想要发生相同的效果.我有这个: @Override
public void setValueAt(Object val,int rowIndex,int columnIndex) {
if (val instanceof Number && ((Number) val).doubleValue() > 0) {
super.setValueAt(val,rowIndex,columnIndex);
}
}
}
这样可防止单元格接受任何非正值,但不会将颜色设置为红色,并将单元格保留为可编辑. 我试着看看JTable在默认情况下如何做拒绝,但我似乎找不到. 如何拒绝非正输入与拒绝非整数输入相同的方式? 谢谢 解决方法private static class JTable.GenericEditor使用内省来捕获通过使用无效的String值构造特定Number子类引发的异常.如果您不需要这样的通用行为,请考虑将ActiveIntegerCellEditor创建为
DefaultCellEditor的子类.您的stopCellEditing()方法将相应更简单.
附录:已更新以使用RIGHT对齐方式和常见错误代码. 附录:另见Using an Editor to Validate User-Entered Text. private static class PositiveIntegerCellEditor extends DefaultCellEditor {
private static final Border red = new LineBorder(Color.red);
private static final Border black = new LineBorder(Color.black);
private JTextField textField;
public PositiveIntegerCellEditor(JTextField textField) {
super(textField);
this.textField = textField;
this.textField.setHorizontalAlignment(JTextField.RIGHT);
}
@Override
public boolean stopCellEditing() {
try {
int v = Integer.valueOf(textField.getText());
if (v < 0) {
throw new NumberFormatException();
}
} catch (NumberFormatException e) {
textField.setBorder(red);
return false;
}
return super.stopCellEditing();
}
@Override
public Component getTableCellEditorComponent(JTable table,Object value,boolean isSelected,int row,int column) {
textField.setBorder(black);
return super.getTableCellEditorComponent(
table,value,isSelected,row,column);
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
