如何使用Java和JFreeChart创建Chart Explorer? [英] How to create a Chart Explorer with Java and JFreeChart?

查看:91
本文介绍了如何使用Java和JFreeChart创建Chart Explorer?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在JFreeChart库的帮助下创建了一个Java桌面程序. 我可以打开一个股票数据文件(symbol.txt),并使该程序显示几个指标. 我想在新的JFrame窗口中创建一个资源管理器,该窗口将打开一个包含库存数据文件的文件夹并检查一些指标值. 我的问题是找到一种方法(在用户级别)一次打开多个文件,但是在程序级别依次处理每个文件(打开第一个文件,检查指示器,关闭第一个文件...继续第二个文件) . 谢谢.

I have created a Java desktop program , with the help of JFreeChart libraries. I can open a stock data file (symbol.txt) and have the program display a couple of indicators. I want to create an explorer in a new JFrame window that will open a folder with stock data files and check some indicator value. My problem is to find a way to open multiple files at once (at the user level) but process every file one after the other at the program level (open first file, check indicator, close first file...continue with second file). Thank you.

几个小时后更新:

这是第一次尝试,它会产生> org.jfree.data.general.SeriesException 错误.

Here is a first attempt , which produces a org.jfree.data.general.SeriesException error when I am trying to open more than one file.


You are attempting to add an observation for the time period 4-January-2011
but the series already contains an observation for that time period.
Duplicates are not permitted.  Try using the addOrUpdate() method.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package nysemarketpick;

import java.io.File;
import javax.swing.JFileChooser;

/**
 *
 * @author skiabox
 */
public class ExplorerForm extends javax.swing.JFrame {

    PriceVolumeChart chart;

    /**
     * Creates new form ExplorerForm
     */
    public ExplorerForm() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        fileChooser = new javax.swing.JFileChooser();
        scrollPane = new javax.swing.JScrollPane();
        textArea = new javax.swing.JTextArea();
        fileMenuBar = new javax.swing.JMenuBar();
        fileMenu = new javax.swing.JMenu();
        openItem = new javax.swing.JMenuItem();

        fileChooser.setFileSelectionMode(javax.swing.JFileChooser.FILES_AND_DIRECTORIES);
        fileChooser.setMultiSelectionEnabled(true);

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Stock Explorer");

        textArea.setColumns(20);
        textArea.setRows(5);
        scrollPane.setViewportView(textArea);

        fileMenu.setText("File");

        openItem.setText("Open");
        openItem.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                openItemActionPerformed(evt);
            }
        });
        fileMenu.add(openItem);

        fileMenuBar.add(fileMenu);

        setJMenuBar(fileMenuBar);

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(scrollPane, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 314, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(80, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .add(75, 75, 75)
                .add(scrollPane, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 100, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(103, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>

    private void openItemActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        int returnVal = fileChooser.showOpenDialog(this);
        if (returnVal == JFileChooser.APPROVE_OPTION)
        {
            File files[];

            //File myFile;

            files = fileChooser.getSelectedFiles();

            for (int i = 0; i < files.length; i++)
            {
                //myFile = files
                chart = new PriceVolumeChart(files[i].getAbsolutePath());

                System.out.println(files[i].getAbsolutePath());

                if (chart.getTLDirection().equals("(-1)"))
                {
                    textArea.append(files[i].getAbsolutePath() + "\n");
                }

                chart = null;
            }
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /*
         * Set the Nimbus look and feel
         */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /*
         * If Nimbus (introduced in Java SE 6) is not available, stay with the
         * default look and feel. For details see
         * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(ExplorerForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(ExplorerForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(ExplorerForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(ExplorerForm.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /*
         * Create and display the form
         */
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new ExplorerForm().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify
    private javax.swing.JFileChooser fileChooser;
    private javax.swing.JMenu fileMenu;
    private javax.swing.JMenuBar fileMenuBar;
    private javax.swing.JMenuItem openItem;
    private javax.swing.JScrollPane scrollPane;
    private javax.swing.JTextArea textArea;
    // End of variables declaration
}

推荐答案

JInternalFrame 可能是一个不错的选择.可以在此处找到示例.这里.使用Action保持菜单和文档井井有条,如此处

JInternalFrame may be a good choice. Examples may be found here and here. Use Action to keep your menus and documents organized, as shown here and here.

附录:我正在谈论3200个文件.

JTable 是一个不错的选择数量级.使用自定义编辑器创建一个可起作用的按钮在特定的行上.多个选择可以使用ListSelectionListener(显示在此处),也可以使用复选框显示在

JTable is a good choice for this order of magnitude. Use a custom editor to create a button that acts on a particular row. Multiple selections can use a ListSelectionListener, shown here, or check boxes, shown here.

附录:您可以在模式对话框中打开JFileChooser,在AbstractAction此处看到,或嵌入在框架中,如此处所示.

Addendum: You can open JFileChooser in a modal dialog, seen here in an AbstractAction, or embedded in the frame, as shown here.

这篇关于如何使用Java和JFreeChart创建Chart Explorer?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆