// Редактировать: плитку следует называть вкладкой Обновление на Listselectionevent, которая не работает должным образом
У меня есть проблема, которую я не могу решить, поэтому могу воспользоваться некоторой помощью. У меня есть программа, которая импортирует csv.file с JFileChooser, а затем импортирует csv.file в JList. При щелчке элемента в списке вкладка статистики обновляется с другими текстовыми значениями. Когда я импортирую новый файл, я могу щелкнуть его внутри списка, и вкладка обновляется правильно. Но когда у меня есть несколько элементов в списке, статистика предыдущих элементов отображается, даже когда я выбираю новый. Вот как выглядит моя программа:
https://i.gyazo.com/b7121a5ed46862482e18d5f0156cb010.png
Внутри моего кода у меня есть методы, расширяющие JPanel, который вытягивает текстовые поля, и тот, который обновляет текстовые поля данными, называемыми updateStatistics (),Внутри ListSelectionEvent вызывается updateStatistics (), поэтому он должен обновлять текстовое поле данными каждый раз, когда я нажимаю элемент в списке, но, как я уже упоминал ранее, он работает только при импорте файла. Как мне решить эту проблему, чтобы поле tetx обновлялось при каждом нажатии элемента в списке, а не только на новых импортированных элементах?
Мой метод, который рисует панель:
private JPanel createViewStatisticsPanel() {
JPanel statPanel = new JPanel(new GridLayout(2, 3));
statPanel.setPreferredSize(new Dimension(1000, 500));
// statPanel.setBorder(BorderFactory.createEmptyBorder(2,2,2,2));
JPanel timePanel = new JPanel();
timePanel.setBorder(BorderFactory.createTitledBorder("Tid/Distans"));
timePanel.setBackground(new Color(224, 255, 255));
tdp.setBackground(new Color(224, 255, 255));
timePanel.add(tdp);
statPanel.add(timePanel);
JPanel startTimepanel = new JPanel();
startTimepanel.setBorder(BorderFactory.createTitledBorder("Altitud"));
startTimepanel.setBackground(new Color(224, 255, 255));
stp.setBackground(new Color(224, 255, 255));
startTimepanel.add(stp);
statPanel.add(startTimepanel);
JPanel startTimepanel1 = new JPanel();
startTimepanel1.setBorder(BorderFactory.createTitledBorder("Hastighet"));
startTimepanel1.setBackground(new Color(224, 255, 255));
stp1.setBackground(new Color(224, 255, 255));
startTimepanel1.add(stp1);
statPanel.add(startTimepanel1);
JPanel startTimepanel2 = new JPanel();
startTimepanel2.setBorder(BorderFactory.createTitledBorder("Puls"));
startTimepanel2.setBackground(new Color(224, 255, 255));
stp2.setBackground(new Color(224, 255, 255));
startTimepanel2.add(stp2);
statPanel.add(startTimepanel2);
JPanel startTimepanel3 = new JPanel();
startTimepanel3.setBorder(BorderFactory.createTitledBorder("Kadens"));
startTimepanel3.setBackground(new Color(224, 255, 255));
stp3.setBackground(new Color(224, 255, 255));
startTimepanel3.add(stp3);
statPanel.add(startTimepanel3);
JPanel startTimepanel4 = new JPanel();
startTimepanel4.setBorder(BorderFactory.createTitledBorder("Lutning"));
startTimepanel4.setBackground(new Color(224, 255, 255));
stp4.setBackground(new Color(224, 255, 255));
startTimepanel4.add(stp4);
statPanel.add(startTimepanel4);
return statPanel;
}
Мой метод, который обновляет его (добавляет текст в текстовые поля):
public void updateStatistics(Statistics stats)
{
stats.calculateStatistics();
tdp.setText("\n Starttid: " + stats.getStartTime() + "\n Slutlig tid: " + stats.getEndTime() + "\n Total tid: "
+ stats.getTotalTime() + "\n Total distans" + stats.getTotalDistance());
stp.setText("\n Lägsta altitud: " + stats.getMinAltitude() + "\n Högsta altitud : " + stats.getMaxAltitude()
+ "\n Genomsnittlig altitud: " + stats.getAvgAltitude());
stp1.setText("\n Lägsta hastighet: " + stats.getMinSpeed() + "\n Högsta hastighet : " + stats.getMaxSpeed()
+ "\n Genomsnittlig hastighet: " + stats.getAvgSpeed());
stp2.setText("\n Lägsta puls: " + stats.getMinHeartrate() + "\n Högsta puls : " + stats.getMaxHeartrate()
+ "\n Genomsnittlig puls: " + stats.getAvgHeartrate());
stp3.setText("\n Lägsta kadens: " + stats.getMinCandence() + "\n Högsta kadens : " + stats.getMaxCandence()
+ "\n Genomsnittlig kadens: " + stats.getAvgCandence());
stp4.setText("\n Lägsta lutning: " + stats.getMinTilt() + "\n Högsta lutning : " + stats.getMaxTilt()
+ "\n Genomsnittlig lutning: " + stats.getAvgTilt());
}
My ListSelectionEvent: (слушатель применен к списку)
private void selectActivity(ListSelectionEvent e) // Lyssnarmetod
{
Activity selectedActivity = listAct.getSelectedValue();
if (selectedActivity != null)
{
stats = new Statistics(activity.getData());
updateStatistics(stats);
}
}