//编辑:该磁贴应被称为Listselectionevent上的“更新”选项卡,无法正常工作
我遇到了一个似乎无法解决的问题,因此可以寻求帮助。我有一个程序,使用JFileChooser导入csv.file,然后将csv.file导入JList。单击列表中的项目时,统计信息选项卡将使用不同的文本值更新自身。导入新文件时,我可以在列表中单击它,并且该选项卡会正确更新。但是,只要列表中有多个项目,即使选择一个新项目,也会显示以前的项目统计信息。这是我的程序的外观:
https://i.gyazo.com/b7121a5ed46862482e18d5f0156cb010.png
在我的代码中,我有一个扩展JPanel的方法,该方法绘制出文本字段,并用一种名为updateStatistics()的数据更新文本字段。在ListSelectionEvent内部,将调用updateStatistics(),以便每次我按列表中的一个项目时都应使用数据更新文本字段,但是就像我前面提到的那样,它仅在导入文件时有效。我该如何解决这个问题,以便tetxfield每次我按列表中的项目时都会更新,而不仅仅是在新导入的项目上更新?
我绘制面板的方法:
private JPanel createViewStatisticsPanel() {
JPanel statPanel = new JPanel(new GridLayout(2,3));
statPanel.setPreferredSize(new Dimension(1000,500));
// statPanel.setBorder(BorderFactory.createEmptyBorder(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));
timePanel.add(tdp);
statPanel.add(timePanel);
JPanel startTimepanel = new JPanel();
startTimepanel.setBorder(BorderFactory.createTitledBorder("Altitud"));
startTimepanel.setBackground(new Color(224,255));
stp.setBackground(new Color(224,255));
startTimepanel.add(stp);
statPanel.add(startTimepanel);
JPanel startTimepanel1 = new JPanel();
startTimepanel1.setBorder(BorderFactory.createTitledBorder("Hastighet"));
startTimepanel1.setBackground(new Color(224,255));
stp1.setBackground(new Color(224,255));
startTimepanel1.add(stp1);
statPanel.add(startTimepanel1);
JPanel startTimepanel2 = new JPanel();
startTimepanel2.setBorder(BorderFactory.createTitledBorder("Puls"));
startTimepanel2.setBackground(new Color(224,255));
stp2.setBackground(new Color(224,255));
startTimepanel2.add(stp2);
statPanel.add(startTimepanel2);
JPanel startTimepanel3 = new JPanel();
startTimepanel3.setBorder(BorderFactory.createTitledBorder("Kadens"));
startTimepanel3.setBackground(new Color(224,255));
stp3.setBackground(new Color(224,255));
startTimepanel3.add(stp3);
statPanel.add(startTimepanel3);
JPanel startTimepanel4 = new JPanel();
startTimepanel4.setBorder(BorderFactory.createTitledBorder("Lutning"));
startTimepanel4.setBackground(new Color(224,255));
stp4.setBackground(new Color(224,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());
}
我的ListSelectionEvent :(应用于列表的侦听器)
private void selectactivity(ListSelectionEvent e) // Lyssnarmetod
{
activity selectedactivity = listact.getSelectedValue();
if (selectedactivity != null)
{
stats = new Statistics(activity.getData());
updateStatistics(stats);
}
}