在其外部的函数中使用for循环中的值

时间:2013-04-23 15:20:37

标签: java swing for-loop jfreechart listselectionlistener

我需要从for循环内部找到的值才能在循环内部的函数中使用,我无法弄清楚如何执行此操作。我希望实现的是从散列映射中的键中提取值,然后仅在JTable 中绘制时才选择该行(使用ListSelectionListener)。通过这种方式,我可以避免绘制一百个可以节省大量时间的表格。我也在使用DefaultTableModel

这是我的for循环:

tableMaker(model);
for(Map.Entry<String,NumberHolder> entry : entries)
{   
  //add rows for each entry of the hashmap to the table             

  double[] v = new double[entry.getValue().singleValues.size()];
  int i = 0;
  for(Long j : entry.getValue().singleValues)
  {
    v[i++] = j.doubleValue();
  }                  
  //right here I need to take "v" 
  //and use it in my tableMaker function for that specific row
}                  

在我的tableMaker函数中,我创建了我的JTable并添加了ListSelectionListener,我希望在选择行时创建直方图并将其添加到我的lowerPanel。这是一些代码。我需要v以便我可以创建dataSet。

public static void tableMaker(DefaultTableModel m)
{
   JPanel lowerPanel = new JPanel();

   //create table here

   frame.getContentPane().add(lowerPanel, BorderLayout.SOUTH);
   table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

    table.getSelectionModel().addListSelectionListener(
            new ListSelectionListener() {

            @Override
            public void valueChanged(ListSelectionEvent e) {
                if (!e.getValueIsAdjusting()) {
                    JFreeChart chart = ChartFactory.createHistogram(
                        plotTitle, xaxis, yaxis, dataset, orientation,
                        show, toolTips, urls);                      
                //  lowerPanel.add(chart);
                //  lowerPanel.revalidate();
                }
            }
        });
}

1 个答案:

答案 0 :(得分:1)

我感觉您正在尝试实施概述here的方法。不是每次都尝试创建新图表,而是在ChartPanel中创建单个图表并保留对其XYPlot的引用。在ListSelectionListener中,您可以使用plot.setDataset()更新图表。在此example中,ChangeListener从现有List<XYDataset>中获取所需的数据集。在此example中,按钮的ActionListener每次调用时都会生成数据集。