⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stockdatabasejdialog.java

📁 JStock是一个免费股市软件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or (at
 * your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 * Copyright (C) 2008 Yan Cheng Cheok <yccheok@yahoo.com>
 */

package org.yccheok.jstock.gui;

import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.AbstractAction;
import javax.swing.DefaultCellEditor;
import javax.swing.JFormattedTextField;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.RowFilter;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.yccheok.jstock.engine.Code;
import org.yccheok.jstock.engine.MutableStockCodeAndSymbolDatabase;
import org.yccheok.jstock.engine.Stock;
import org.yccheok.jstock.engine.StockCodeAndSymbolDatabase;
import org.yccheok.jstock.engine.Symbol;

/**
 *
 * @author  yccheok
 */
public class StockDatabaseJDialog extends javax.swing.JDialog {

    /** Creates new form StockDatabaseJDialog */
    public StockDatabaseJDialog(java.awt.Frame parent, StockCodeAndSymbolDatabase stockCodeAndSymbolDatabase, boolean modal) {
        super(parent, modal);
        this.mutableStockCodeAndSymbolDatabase = new MutableStockCodeAndSymbolDatabase(stockCodeAndSymbolDatabase);
        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">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel6 = new javax.swing.JPanel();
        jXHeader1 = new org.jdesktop.swingx.JXHeader();
        jPanel4 = new javax.swing.JPanel();
        jPanel1 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jPanel3 = new javax.swing.JPanel();
        jTextField1 = new javax.swing.JTextField();
        jPanel2 = new javax.swing.JPanel();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTable2 = new javax.swing.JTable();
        jPanel5 = new javax.swing.JPanel();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jPanel7 = new javax.swing.JPanel();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Stock Database");
        setResizable(false);
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                formMouseClicked(evt);
            }
        });

        jPanel6.setLayout(new java.awt.BorderLayout(5, 5));

        jXHeader1.setDescription("If you cannot find your stock symbol in the official database downloaded from stock exchange server, you may add your stock manually into the user defined database.");
        jXHeader1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/64x64/db_add.png"))); // NOI18N
        jXHeader1.setTitle("Stock Database");
        jXHeader1.setToolTipText("");
        jPanel6.add(jXHeader1, java.awt.BorderLayout.CENTER);

        getContentPane().add(jPanel6, java.awt.BorderLayout.NORTH);

        jPanel4.setLayout(new java.awt.GridLayout());

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Stock Exchange Server (Read only)"));
        jPanel1.setLayout(new java.awt.BorderLayout());

        jTable1.setAutoCreateRowSorter(true);
        jTable1.setModel(getCodeSymbolTableModel());
        this.jTable1.setDefaultRenderer(Symbol.class, new StockTableCellRenderer());
        this.jTable1.setDefaultRenderer(Code.class, new StockTableCellRenderer());
        jScrollPane1.setViewportView(jTable1);

        jPanel1.add(jScrollPane1, java.awt.BorderLayout.CENTER);

        jTextField1.setColumns(10);
        jTextField1.getDocument().addDocumentListener(
            new DocumentListener() {
                public void changedUpdate(DocumentEvent e) {
                    newFilter();
                }
                public void insertUpdate(DocumentEvent e) {
                    newFilter();
                }
                public void removeUpdate(DocumentEvent e) {
                    newFilter();
                }
            });
            jPanel3.add(jTextField1);

            jPanel1.add(jPanel3, java.awt.BorderLayout.NORTH);

            jPanel4.add(jPanel1);

            jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("User Defined"));
            jPanel2.setLayout(new java.awt.BorderLayout());

            jTable2.setAutoCreateRowSorter(true);
            jTable2.setModel(getSymbolTableModel());
            jTable2.setCellEditor(getSymbolCellEditor());
            this.jTable2.addMouseListener(new TableRowPopupListener());
            this.jTable2.setDefaultRenderer(Symbol.class, new StockTableCellRenderer());
            this.jTable2.setDefaultEditor(Symbol.class, this.getSymbolCellEditor());
            //this.jTable2.setDefaultEditor(Object.class, this.getSymbolCellEditor());
            jTable2.addKeyListener(new java.awt.event.KeyAdapter() {
                public void keyPressed(java.awt.event.KeyEvent evt) {
                    jTable2KeyPressed(evt);
                }
            });
            jScrollPane2.setViewportView(jTable2);

            jPanel2.add(jScrollPane2, java.awt.BorderLayout.CENTER);

            jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/16x16/filenew.png"))); // NOI18N
            jButton1.setText("New");
            jButton1.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton1ActionPerformed(evt);
                }
            });
            jPanel5.add(jButton1);

            jButton2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/16x16/editdelete.png"))); // NOI18N
            jButton2.setText("Delete");
            jButton2.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton2ActionPerformed(evt);
                }
            });
            jPanel5.add(jButton2);

            jPanel2.add(jPanel5, java.awt.BorderLayout.PAGE_START);

            jPanel4.add(jPanel2);

            getContentPane().add(jPanel4, java.awt.BorderLayout.CENTER);

            jButton3.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/16x16/apply.png"))); // NOI18N
            jButton3.setText("OK");
            jButton3.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton3ActionPerformed(evt);
                }
            });
            jPanel7.add(jButton3);

            jButton4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/16x16/button_cancel.png"))); // NOI18N
            jButton4.setText("Cancel");
            jButton4.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton4ActionPerformed(evt);
                }
            });
            jPanel7.add(jButton4);

            getContentPane().add(jPanel7, java.awt.BorderLayout.PAGE_END);

            pack();
        }// </editor-fold>//GEN-END:initComponents

    private void formMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_formMouseClicked
    // TODO add your handling code here:
        clearAllTablesSelection();
    }//GEN-LAST:event_formMouseClicked

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
    // TODO add your handling code here:
        addNewSymbol();
    }//GEN-LAST:event_jButton1ActionPerformed

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
    // TODO add your handling code here:
        deleteSelectedUserDefinedDatabase();
    }//GEN-LAST:event_jButton2ActionPerformed

    private void jTable2KeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_jTable2KeyPressed
        if(KeyEvent.VK_DELETE == evt.getKeyCode()) {
            this.deleteSelectedUserDefinedDatabase();
            return;
        }
    }//GEN-LAST:event_jTable2KeyPressed

    public MutableStockCodeAndSymbolDatabase getMutableStockCodeAndSymbolDatabase()
    {
        return result;
    }

    private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed
    // TODO add your handling code here:
        this.result = null;
        this.setVisible(false);
        this.dispose();    
    }//GEN-LAST:event_jButton4ActionPerformed

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
        final SymbolTableModel model = (SymbolTableModel)(jTable2.getModel());
        List<Symbol> symbols = model.getSymbols();
    
        final List<Symbol> oldSymbols = this.mutableStockCodeAndSymbolDatabase.getUserDefinedSymbol();
        for(Symbol symbol : oldSymbols) {
            this.mutableStockCodeAndSymbolDatabase.removeUserDefinedSymbol(symbol);
        }
        
        for(Symbol symbol : symbols) {
            if(symbol.toString().length() <= 0) {
                continue;
            }
            
            this.mutableStockCodeAndSymbolDatabase.addUserDefinedSymbol(symbol);
        }
        
        result = mutableStockCodeAndSymbolDatabase;
        
        this.setVisible(false);
        this.dispose();    
    }//GEN-LAST:event_jButton3ActionPerformed
    
    private class TableRowPopupListener extends MouseAdapter {
        
        @Override
        public void mousePressed(MouseEvent e) {
            maybeShowPopup(e);
        }

        @Override
        public void mouseReleased(MouseEvent e) {
            maybeShowPopup(e);
        }

        private void maybeShowPopup(MouseEvent e) {
            if (e.isPopupTrigger()) {
                getMyJTablePopupMenu().show(e.getComponent(), e.getX(), e.getY());
            }
        }
    }

    private static final class StockTableCellRenderer extends javax.swing.table.DefaultTableCellRenderer {
    
        /** Creates a new instance of StockTableCellRender */
        public StockTableCellRenderer() {
            super();
        }

    
        private Color getBackgroundColor(int row) {
            final JStockOptions jStockOptions = MainFrame.getJStockOptions();
        
            if(row % 2 == 0) {
                return jStockOptions.getFirstRowBackgroundColor();
            }
        
            return jStockOptions.getSecondRowBackgroundColor();
        }
    
        @Override
        public Component getTableCellRendererComponent(
                                JTable table, Object color,
                                boolean isSelected, boolean hasFocus,
                                int row, int column) {
            Component c = super.getTableCellRendererComponent(table, color, isSelected, hasFocus, row, column);

            if(isSelected || hasFocus) return c;

            final JStockOptions jStockOptions = MainFrame.getJStockOptions();        
        
            c.setForeground(jStockOptions.getNormalTextForegroundColor());
    
            c.setBackground(getBackgroundColor(row));

            return c;
        }    
    }

    private void deleteSelectedUserDefinedDatabase() {
        int rows[] = jTable2.getSelectedRows();

        final SymbolTableModel symbolTableModel = (SymbolTableModel)(jTable2.getModel());
        
        Arrays.sort(rows);

        for(int i=rows.length-1; i>=0; i--) {                
            int row = rows[i];

            if(row < 0) continue;

            final int modelIndex = jTable2.getRowSorter().convertRowIndexToModel(row);            
            symbolTableModel.removeRow(modelIndex);
        }        
    }
    
    private void clearAllTablesSelection() {
        this.jTable1.getSelectionModel().clearSelection();        
        this.jTable2.getSelectionModel().clearSelection();        
    }
    
    private void selectUserDefinedDatabaseTable(int modelIndex) {
        clearAllTablesSelection();
                
        final int selectedViewIndex = jTable2.getRowSorter().convertRowIndexToView(modelIndex);
        jTable2.getSelectionModel().setSelectionInterval(selectedViewIndex, selectedViewIndex);
        JTableUtilities.scrollToVisible(jTable2, selectedViewIndex, 0);
        
    }
    
    private void selectStockExchangeServerDatabaseTable(int modelIndex) {
        clearAllTablesSelection();
        
        final int selectedViewIndex = jTable1.getRowSorter().convertRowIndexToView(modelIndex);
        jTable1.getSelectionModel().setSelectionInterval(selectedViewIndex, selectedViewIndex);        
        JTableUtilities.scrollToVisible(jTable1, selectedViewIndex, 0);
    }
    
    private void addNewSymbol()
    {
        final SymbolTableModel model = (SymbolTableModel)jTable2.getModel();
        final int selectedModelIndex = model.addNewSymbol();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -