У меня есть модель, которая развивается с помощью таймера и отображает данные на JPanel. Обновление задается с помощью прослушивателя свойств.
В какой-то момент модель обрабатывает довольно большой объем данных, и не каждый шаг приводит к перерисовке, до такой степени, что модель развивается на 20 шагов для одиночная перерисовка.
Я делаю что-то не так со структурой своего кода?
Я пробовал использовать синхронизированный для некоторых из этих методов , проблема остается.
Вот SSCCE:
class main(){
Model model;
MyPanel panel;
model.addPropertyChangeListener("currentStep", panel);
}
class Model {
private final PropertyChangeSupport support = new PropertyChangeSupport(this);
private int step, previousStep;
public World (){
startTimer();
}
private void startTimer() {
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
if (isRunning) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
step();
}
});
}
}
}, 0, periodMillisec);
}
public void step() {
// do stuff
step++;
updateListeners();
}
protected void updateListeners() {
support.firePropertyChange("currentStep", prevStep, step);
previousStep = step;
}
}
class MyPanel extends JPanel implements PropertyChangeListener {
public void paintComponent(Graphics g){
// paint stuff
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
evt.getNewValue());
repaint();
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... -it-should
Моя JPanel не перерисовывается так часто, как должна ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1731336217
Anonymous
У меня есть модель, которая развивается с помощью таймера и отображает данные на JPanel. Обновление задается с помощью прослушивателя свойств.
В какой-то момент модель обрабатывает довольно большой объем данных, и не каждый шаг приводит к перерисовке, до такой степени, что модель развивается на 20 шагов для одиночная перерисовка.
Я делаю что-то не так со структурой своего кода?
Я пробовал использовать синхронизированный для некоторых из этих методов , проблема остается.
Вот SSCCE:
class main(){
Model model;
MyPanel panel;
model.addPropertyChangeListener("currentStep", panel);
}
class Model {
private final PropertyChangeSupport support = new PropertyChangeSupport(this);
private int step, previousStep;
public World (){
startTimer();
}
private void startTimer() {
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
if (isRunning) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
step();
}
});
}
}
}, 0, periodMillisec);
}
public void step() {
// do stuff
step++;
updateListeners();
}
protected void updateListeners() {
support.firePropertyChange("currentStep", prevStep, step);
previousStep = step;
}
}
class MyPanel extends JPanel implements PropertyChangeListener {
public void paintComponent(Graphics g){
// paint stuff
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
evt.getNewValue());
repaint();
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79178082/my-jpanel-does-not-repaint-as-often-as-it-should[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия