如何使用正则表达式验证 JTable 的第一列?

2023-12-10

我正在编写一个程序,我必须验证第一列是否是 IP 地址。

到目前为止,我只弄清楚如何找到如何过滤行。但在将数据写入文件之前必须检查该列。

有人可以帮助我吗?


您可以使用InputVerifier验证表格单元格的输入。这样你就不必验证一切after所有的输入都在,如果有很多不正确的输入,这可能会很麻烦。随着InputVerifier您将获得每个单元格输入的验证。

这是一个例子。我不确定正则表达式对于 IP 地址是否正确,但我有一个最终的静态字段,您可以将其更改为正则表达式does如果这个不行的话就可以工作。

有了这个特殊的InputVerifier,如果该字段与正则表达式匹配,或者如果该字段为空,则将允许焦点更改,否则您将收到一个错误对话框。

text.matches(IP_REGEX) || text.isEmpty();

enter image description here

import javax.swing.DefaultCellEditor;
import javax.swing.InputVerifier;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;

public class TableVerifyInput {

    private static final String IP_REGEX = "^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}$";

    public TableVerifyInput() {
        final InputVerifier verifier = getInputVerifier();
        final DefaultCellEditor editor = getTableCellEditor(verifier);

        String[] cols = {"IP address", "Column 2"};
        Object[][] data = {{null, null}, {null, null}};
        DefaultTableModel model = new DefaultTableModel(data, cols);

        JTable table = new JTable(model) {
            public TableCellEditor getCellEditor(int row, int column) {
                int modelColumn = convertColumnIndexToModel(column);

                if (modelColumn == 0) {
                    return editor;
                } else {
                    return super.getCellEditor(row, column);
                }
            }
        };

        JFrame frame = new JFrame("Table Cell Verify");
        frame.add(new JScrollPane(table));
        frame.pack();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

    private InputVerifier getInputVerifier() {
        InputVerifier verifier = new InputVerifier() {

            @Override
            public boolean verify(JComponent input) {
                JTextField field = (JTextField) input;
                String text = field.getText();
                return text.matches(IP_REGEX) || text.isEmpty();
            }

            @Override
            public boolean shouldYieldFocus(JComponent input) {
                boolean valid = verify(input);
                if (!valid) {
                    JOptionPane.showMessageDialog(null, "Invalid IP address");
                }
                return valid;
            }

        };
        return verifier;
    }

    private DefaultCellEditor getTableCellEditor(final InputVerifier verifier) {
        DefaultCellEditor editor = new DefaultCellEditor(new JTextField()) {
            {
                getComponent().setInputVerifier(verifier);
            }

            @Override
            public boolean stopCellEditing() {
                if (!verifier.shouldYieldFocus(getComponent())) {
                    return false;
                }
                return super.stopCellEditing();
            }

            @Override
            public JTextField getComponent() {
                return (JTextField) super.getComponent();
            }

        };
        return editor;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new TableVerifyInput();
            }
        });
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用正则表达式验证 JTable 的第一列? 的相关文章

随机推荐

  • 如何在Column(或任何可滚动视图)内的FlutterMap(flutter_map包)上使用手势?

    我遇到的问题是 我在可滚动列中有一个地图 作为地图 我使用 FlutterMap flutter map 包 这是颤振的传单 在谷歌地图中 有一个通过使用 gestureRecognizers 来解决这个问题的解决方案 谷歌地图包同样问题的
  • 如何摆脱多个嵌套的 for 循环?

    我有一个 Python 3 2 脚本 可以搜索具有我想要的属性的点 但它有一个丑陋的部分 for x in range 0 p for y in range 0 p for z in range 0 p for s in range 0 p
  • AFNetworking 2.0 上的缓存

    所以这就是交易 我最近开始使用 AFNetworking 在开始时使用以下代码下载一些文件 NSMutableURLRequest rq api requestWithMethod GET path YOUR URL TO FILE par
  • 计算目录中具有给定扩展名的文件数量 - C++?

    在 C 中是否可以计算目录中具有给定扩展名的文件的数量 我正在编写一个程序 最好做这样的事情 伪代码 if file extension foo num files for int i 0 i lt num files i do somet
  • Android onCreate() 方法在设备旋转时调用两次。 (工业控制系统)

    我正在开发 Android 平板电脑应用程序 我必须管理应用程序方向 我遇到一个问题 每次旋转设备时 onCreate 都会被调用 我在 Honeycomb 3 1 上修复了这个问题 方法是在 Manifest xml 文件中的活动标记处设
  • 如何将多个图像和文本合并为单个图像?

    我在 div 中有多个 PNG 图像 这些图像是 PNG 并根据用户选择的自定义选项作为单个图像呈现给用户 此外 添加文本也可以作为其他功能启用 它允许带有文本的 div 添加到这些图像的上方 现在我想生成一个将多个图像和文本组合在一起的图
  • 从空格分隔的文件中删除文件头匹配的列

    我有一个以空格分隔的输入文本文件 我想使用 sed 或 awk 删除列标题为 size 的列 输入文件 id quantity colour shape size colour shape size colour shape size 1
  • Bash:删除名称末尾的数字。

    我有这样的文件 外星人头骨 2224154 jpg 雪鸟 红色 箭头 雷鸟 蓝色 天使 43264 jpg 死亡空间 album 1053 jpg 如何在 bash 中删除 jpg 之前的 ID 字符串 id 始终由前面的单词 分隔 谢谢
  • 以编程方式启用/禁用硬件设备[重复]

    这个问题在这里已经有答案了 可能的重复 NET 如何禁用系统设备 Win32 API 函数以编程方式启用 禁用设备 在 C 中 有没有办法以编程方式禁用和重新启用设备 我正在寻找与您进入设备管理器并右键单击设备并禁用或启用它时发生的功能基本
  • python 按值列出而不是按引用列出[重复]

    这个问题在这里已经有答案了 让我们举个例子 a help copyright credits license b a b append XYZ b help copyright credits license XYZ a help copy
  • 我的 WordPress 网站上的 footer.php 文件出现问题

    我使用了调试 收到以下错误 PHP Fatal error Uncaught TypeError ceil Argument 1 num must be of type int float string Give in var www ht
  • 是否可以让任何数据流块类型发送多个中间结果作为单个输入的结果?

    是否可以得到TransformManyBlocks 在创建中间结果时将其发送到下一步 而不是等待整个结果IEnumerable
  • Scala 将多行字符串转换为 BigInt

    我正在尝试使用以下代码从字符串中解析 100 个 50 位数字 val input 37107287533902102798797998220837590246510135740250 463769376774900097126481248
  • 谷歌 reCaptcha IE8

    Internet Explorer 8 支持 Google reCaptcha v2 吗 如果没有 是否有任何合适的 Internet Explorer 8 兼容验证码 我发现 reCaptcha 代码尝试使用 getContext 方法的
  • 在应用程序之间发送套接字c#

    我想知道是否有一种方法 您有一个 net 应用程序名称 appA 它接收 tcp 套接字连接 然后根据某些规则将套接字连接发送到另一个 net 应用程序名为 appB 我知道这违反了很多安全和良好实践 但如果可能的话会很有趣 Proxy 一
  • 动态 LiveTile - 添加背景图像?

    在我的 Windows Phone 7 应用程序中使用动态磁贴 效果非常好 我现在正在尝试创建动态动态图块 但无法显示背景图像 当使用下面的代码时 我只得到一个黑色的瓷砖 显示我添加的文本 但不显示背景图像 图像 构建操作 设置为 内容 有
  • WPF 背景两种色调

    我正在尝试做一些如此简单的事情 但无法取得任何成果 我一直在网上搜寻 试图找到一个清晰的示例或少量信息 但我找到的每一篇文章都显示了完全相同的简单示例 我想要做的就是为列表框项目设置一个背景 该背景是两种色调 但它们之间没有渐变混合 到目前
  • Pandas 合并两个具有不同列的数据框

    我肯定在这里错过了一些简单的东西 尝试合并 pandas 中几乎具有相同列名的两个数据框 但右侧数据框有一些左侧没有的列 反之亦然 gt df may id quantity attr 1 attr 2 0 1 20 0 1 1 2 23
  • 如何重定向 cron 脚本的完整输出

    我每天 18 35 运行一个简单的 cronjob 05 18 job sh 2 gt 1 gt gt job log 所以 job sh 的输出应该写入 job log 中 在job sh中 有一些echo命令和一些python脚本被执行
  • 如何使用正则表达式验证 JTable 的第一列?

    我正在编写一个程序 我必须验证第一列是否是 IP 地址 到目前为止 我只弄清楚如何找到如何过滤行 但在将数据写入文件之前必须检查该列 有人可以帮助我吗 您可以使用InputVerifier验证表格单元格的输入 这样你就不必验证一切after