Мне нужно поддерживать очень старое и плохо написанное программное обеспечение Java.И после обновления я столкнулся с проблемой: есть несколько кнопок, которые изменяют показанную панель в макете карты.Есть зарегистрированные обработчики, и эта часть, кажется, работает.Теперь вторая часть этих кнопок меняет цвет фона.Но это изменение не вызвано щелчком мыши.По крайней мере, не напрямую.Нажатие кнопки вызывает сообщение на некотором компьютере, после чего этот компьютер отвечает статусом, и этот статус приводит к изменению цвета этой кнопки.
Это изменение цвета перестало работать после последнего обновления.Таким образом, в основном есть 2 вопроса:
У меня есть смутное представление о том, что это отсутствие изменения цвета связано с тем, что «не обновляйте элементы GUI вне потока отправки событий».Насколько вероятно, что это корень проблемы?Есть предположение, которое приводит к такому предположению: перемещение мыши вызывает изменение цвета через некоторое время.
Если да, какой самый простой способ справиться с этим?Реализовать PropertyChangeListener на этих кнопках?Или каким-либо другим (лучшим) способом?
Так как хорошие люди здесь настаивают на том, чтобы увидеть какой-то код:
Color[] backgroundColors = {
ColorExt.btnCol, // 0 0 not prepare mode, not selected
ColorExt.darkGreen, // 0 1 not prepare mode, selected
ColorExt.YELLOW, // 1 0 prepare mode, not selected
ColorExt.dimOrange, // 1 1 prepare mode, selected
};
JButton[] btn = { mainframe.jBtnLoader1, mainframe.jBtnLoader2, mainframe.jBtnLoader3 };
for (int ldr=0; ldr<3; ldr++) {
int colorIdx = 0;
if ((inCellViewFromLoader[ldr][124] & 16) != 0)
colorIdx = 2; // bLoaderError = true => prepare
if (mainframe.currentSelectedLoader == ldr) {
colorIdx += 1; // selected
}
btn[ldr].setBackground(backgroundColors[colorIdx]);
}
Хотя в этом нет ничего особенного.Этот код сам по себе не является проблемой.Я предполагаю, что, поскольку этот код выполняется в некотором сетевом потоке, а не в потоке диспетчеризации событий, , что является корнем проблемы.