Итак, проблема, с которой я сталкиваюсь, вероятно, проще всего показана на картинках:
Это первое изображение представляет собой снимок игрового поля
Каждый из этих квадратов — «Plots» — является JButtons.
При нажатии одной из кнопок JButton над дисплеем Plot, т. е. «Купить продукцию», произойдет соответствующее действие:
Все идет нормально.
Но при переключении на любую из других вкладок — «Товары» или «Помощь» — и переключении обратно на вкладку «Игра» мне удавалось только это:
Я думаю, что шаги, которые я предпринимаю для обновления отображения сюжета после покупки продуктов, должны нормально работать для обновления отображения после переключения вкладок, но это не так.
Вот код, который я использую для обновления дисплея при покупке продуктов:
buyProduce.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
try {
buyProduce();
plot_panel.removeAll();
createPlots();
labelStore.get("Cash_Label").setText(game.roundedWorth());
} catch (IOException e) {
e.printStackTrace();
} catch (BankruptException e) {
JOptionPane.showMessageDialog(frame,
"Bankrupt after attempt to purchase Produce");
}
}
});
Я пытался сделать это с помощью ChangeListener на TabbedPane, только чтобы отображение графика стало «пустым», как на 3-м рисунке.
tabbedPane.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent arg0) {
plot_panel.removeAll();
createPlots();
}
});
Тем не менее, дисплей остается «пустым», пока я не выполняю — с помощью одной из кнопок над дисплеем — действие, которое обновляет дисплей.
(Если, например, когда дисплей «пустой», я «Куплю продукты», все выглядит так, как должно.)
Может ли кто-нибудь здесь сказать, из того, что я разместил, что происходит не так и где?
Я рад опубликовать больше кода, если это необходимо, но подумал, что должен попытаться сделать это как можно более аккуратным.
Заранее спасибо, Дуг.
РЕДАКТИРОВАТЬ: я не хотел тратить время людей на плохой MCVE, поэтому здесь - http://1drv.ms/1Hx5sA1 - это ссылка на сжатую папку со всем содержимым.
Если люди не хотят в этом разбираться, я попробую переключиться на JTable.
revalidate()
иrepaint()
plot_panel
после удаления и добавления компонентов. Но я почти хочу сказать, что, возможно, нам следует поискать другой дизайн, но просто недостаточно информации, чтобы отталкиваться от нее. - person Paul Samsotha   schedule 22.11.2014