JavaFX TableView все поля пустые [дубликаты]

Я продемонстрирую код, который не использует классы:

def state_init(state):
    state['field'] = 'init'

def state_add(state, x):
    state['field'] += x

def state_mult(state, x):
    state['field'] *= x

def state_getField(state):
    return state['field']

myself = {}
state_init(myself)
state_add(myself, 'added')
state_mult(myself, 2)

print( state_getField(myself) )
#--> 'initaddedinitadded'

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

Теперь давайте продемонстрируем приведенный выше код, используя встроенный механизм класса python, чтобы показать, как это в основном одно и то же.

class State(object):
    def __init__(self):
        self.field = 'init'
    def add(self, x):
        self.field += x
    def mult(self, x):
        self.field *= x

s = State()
s.add('added')    # self is implicitly passed in
s.mult(2)         # self is implicitly passed in
print( s.field )

[мигрировал мой ответ из дублированного закрытого вопроса]

10
задан Keith_Indy 24 September 2013 в 13:48
поделиться

2 ответа

Этот вопрос действительно является дубликатом: Javafx PropertyValueFactory не заполняет Tableview , но я конкретно рассмотрю ваш конкретный случай, так что это понятно.

Фон

Свойство PropertyValueFactory использует отражение для определения методов получения и установки значений данных, а также для получения связующих свойств из вашего класса модели. Образец следующий:

PropertyValueType getName()
void setName(PropertyValueType value)
PropertyType nameProperty()

Где «имя» - это строка, указанная в конструкторе PropertyValueFactory.

Почему ваше приложение не работает

У вас есть эти три выражения:

new PropertyValueFactory<sresult, String>("DateEntered")
new PropertyValueFactory<sresult, String>("cDesc")
new PropertyValueFactory<sresult, String>("CreatedBy")

Для свойств вашего образца PropertyValueFactory будет искать эти методы:

"DateEntered" => getDateEntered()
"cDesc" => getCDesc()
"CreatedBy" => getCreatedBy()

И у вас есть эти три геттера на вашем sresult class:

getDateEntered()
getcDesc()
getEnteredBy()

Только свойство getDateEntered() будет собрано PropertyValueFactory, потому что это единственный метод сопоставления, определенный в классе sresult.

Совет

Вам нужно будет принять стандарты Java, если вы хотите, чтобы отражение в PropertyValueFactory работало (альтернатива - не использовать PropertyValueFactory и вместо этого писать ваши собственные клеточные фабрики с нуля).

Принятие Соглашения о присвоении имен Java верблюдов также упрощает чтение Java-кода вашим разработчикам Java.

30
ответ дан Community 28 August 2018 в 23:17
поделиться

Для всех, кто еще не получил его после прохождения вышеизложенного, моя проблема заключалась в том, что я не указывал своим сеттерам «публичное окончательное» обозначение.

0
ответ дан Zachary Bennett 28 August 2018 в 23:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: