【问题标题】:Defining a table column to have Hex numbers only将表列定义为仅包含十六进制数字
【发布时间】:2016-05-22 06:59:33
【问题描述】:

我有一个列数的 JTable。 我有兴趣让其中一列只接受十六进制数字。 数字的格式为: 0x[0-9a-fA-F]*

如何创建它? 如果我可以添加“错误”指示会很棒

【问题讨论】:

标签: java swing jtable hex tablecellrenderer


【解决方案1】:

试试这个:

boolean isValidHex(String s) {
        return s.matches("0x[0-9a-fA-F]*");
}

void addNumberToColumn(int number) {
    String s = "0x" + Integer.toHexString(number);
    if (isValidHex(s)) {
        // accept/add to column
    } else {
        // produce error/show error message
    }
}

如果你能提供你的代码,那就太好了,这样你的问题对社区来说会更清楚。

编辑: 好的,如果我理解正确,您使用

TableDemo.java

而您只想验证用户输入,以便他可以输入 HEX 格式的数字或不输入任何内容(或者应该显示错误)。
十六进制整数可以表示为字符串,所以首先,您必须更改 data 数组以告诉您的 TableModel 您将在“# of Years”中使用字符串(但不是整数)-专栏:

private Object[][] data = {
            {"Kathy", "Smith",
                "Snowboarding", "5", new Boolean(false)}, // or new String("5") if you want :)
            {"John", "Doe",
                "Rowing", "3", new Boolean(true)},
            {"Sue", "Black",
                "Knitting", "2", new Boolean(false)},
            {"Jane", "White",
                "Speed reading", "2", new Boolean(true)},
            {"Joe", "Brown",
                "Pool", "10", new Boolean(false)}
};

接下来就是修改setValueAt()方法:

public void setValueAt(Object value, int row, int col) {
    if (DEBUG) {
        System.out.println("Setting value at " + row + "," + col
                + " to " + value
                + " (an instance of "
                + value.getClass() + ")");
    }

    if (col == 3) { // num of Years column
        boolean isValidHex = ((String) value).matches("0x[0-9a-fA-F]*");
        if (isValidHex) {
            data[row][col] = value;
            fireTableCellUpdated(row, col);
        } else {
            data[row][col] = "Error: Wrong format!";
        }
    } else {
        data[row][col] = value;
        fireTableCellUpdated(row, col);
    }

    if (DEBUG) {
        System.out.println("New value of data:");
        printDebugData();
    }
}

【讨论】:

  • 我没有任何特殊代码,我的代码是基于这个例子docs.oracle.com/javase/tutorial/uiswing/components/…我想改变“# of Years”来表示一个HEX数字
  • 好的,现在它更容易理解了 :) 我已经使用 TableDemo.java 为您的问题编辑了答案。代码可能看起来很脏,但我希望你现在有一个想法,你可以根据自己的需要进行调整。
  • @Kamil.Khoury 对你有帮助吗?
  • 部分地,我使用您的代码来实现 HexIntegerCellEditor 并将其分配给我需要的列。我把你的实现放在 stopCellEditing() 中。谢谢
猜你喜欢
  • 2014-11-18
  • 2014-03-26
  • 2014-10-07
  • 1970-01-01
  • 2011-12-31
  • 2014-10-10
  • 2012-09-26
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多