微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 如何将JTable单元格输入标记为无效?

如果我使用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);
    }
}

原文地址:https://www.jb51.cc/java/122419.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐