2016-05-22 2 views
0

У меня есть JTable с количеством столбцов. Мне интересно, чтобы один из столбцов принимал только шестнадцатеричные числа. Формат номеров будет: 0x [0-9a-fA-F] *Определение столбца таблицы, чтобы иметь только шестнадцатеричные числа

Как его создать? Если я могу добавить признак «ошибки» было бы здорово

+2

[Использование пользовательских рендереров] (http://docs.oracle.com/javase/tutorial/uiswing/components/table.html #renderer)? – MadProgrammer

ответ

0

Попробуйте это:

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 
    } 
} 

Было бы здорово, если бы вы могли предоставить код, чтобы ваш вопрос был бы более понятным для общества.

EDIT: Хорошо, если я понимаю правильно, вы используете

TableDemo.java

и вы просто хотите, чтобы подтвердить ввод данных пользователем, так что он может войти либо HEX -форматированное число или ничего (или, скорее, это должно показать ошибку).
Hex-Целые могут быть представлены так же, как строки, поэтому, прежде всего, вам нужно изменить массив data, чтобы сообщить вашему TableModel, что вы собираетесь использовать строки (но не целые) в столбце «Количество лет»:

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(); 
    } 
} 
+0

У меня нет специального кода, мой код основан на этом примере https://docs.oracle.com/javase/tutorial/uiswing/components/table.html#data. Я хочу изменить «# года» на представляют HEX-номер –

+0

Хорошо, теперь его более понятно :) Я отредактировал свой ответ для вашего вопроса, используя TableDemo.java. Код может выглядеть грязным, но я надеюсь, что у вас есть идея, и вы можете настроить его для своих нужд. – Yev

+0

@ Kamil.Khoury это вам помогло? – Yev

Смежные вопросы