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

📄 stockdatabasejdialog.java

📁 JStock是一个免费股市软件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        selectUserDefinedDatabaseTable(selectedModelIndex);        
    }
    
    private JPopupMenu getMyJTablePopupMenu() {
        final JPopupMenu popup = new JPopupMenu();
        
        javax.swing.JMenuItem menuItem = new JMenuItem("New", new javax.swing.ImageIcon(getClass().getResource("/images/16x16/filenew.png")));
        
	menuItem.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                addNewSymbol();
            }
	});
                
	popup.add(menuItem);                
        
        if(jTable2.getSelectedRowCount() >= 1) {
            popup.addSeparator();
            
            menuItem = new JMenuItem("Delete", new javax.swing.ImageIcon(getClass().getResource("/images/16x16/editdelete.png")));

            menuItem.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent evt) {
                    deleteSelectedUserDefinedDatabase();
                }
            });  
            
            popup.add(menuItem);            
        }
        
        return popup;
    }

    // For jTable2.
    private TableModel getSymbolTableModel()
    {
        return new SymbolTableModel();
    }
    
    // For jTable1.
    private TableModel getCodeSymbolTableModel()
    {
        return new CodeSymbolTableModel();
    }
    
    private void newFilter()
    {
        // I really have no idea what the second parameter is.
        RowFilter<CodeSymbolTableModel, Integer> rf = null;
        
        //If current expression doesn't parse, don't update.
        try {
            rf = RowFilter.regexFilter("^" + jTextField1.getText().toUpperCase());
        } catch (java.util.regex.PatternSyntaxException e) {
            return;
        }
        ((TableRowSorter<CodeSymbolTableModel>)jTable1.getRowSorter()).setRowFilter(rf);
    }
    
    private class CodeSymbolTableModel extends AbstractTableModel {

        // For fast access purpose.
        private final List<Symbol> symbols;
        private final List<Code> codes;
        
        public CodeSymbolTableModel() {
            final MutableStockCodeAndSymbolDatabase database = new MutableStockCodeAndSymbolDatabase(mutableStockCodeAndSymbolDatabase);
            
            List<Symbol> _symbols = database.getUserDefinedSymbol();

            for(Symbol symbol : _symbols) {
                database.removeUserDefinedSymbol(symbol);
            }
            
            symbols = Collections.unmodifiableList(new ArrayList<Symbol>(database.getSymbols()));
            codes = Collections.unmodifiableList(new ArrayList<Code>(database.getCodes()));
        }
        
        @Override
        public int getRowCount() {
            return symbols.size();
        }

        @Override
        public int getColumnCount() {
            return columnNames.length;
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            switch(columnIndex)
            {
                case 0:
                    return symbols.get(rowIndex);
                case 1:
                    return codes.get(rowIndex);
            }
            
            return null;
        }

        @Override
        public String getColumnName(int col) {
            return columnNames[col];
        }

        @Override
        public Class getColumnClass(int c) {
            return columnClasses[c];
        }
        
        public int findCodeOrSymbol(String string) {
            final Symbol symbol = Symbol.newInstance(string);
            final Code code = Code.newInstance(string);
            
            final int symbolIndex = symbols.indexOf(symbol);
            final int codeIndex = codes.indexOf(code);
            
            if(symbolIndex >= 0) return symbolIndex;
            if(codeIndex >= 0) return codeIndex;
            
            return -1;
        }
        
        private final String[] columnNames = {"Code", "Symbol"};
        private final Class[] columnClasses = {Code.class, Symbol.class};
    }
    
    private TableCellEditor getSymbolCellEditor() {
        return new MyTableCellEditor();
    }
            
    private class MyTableCellEditor extends DefaultCellEditor {    
        private JFormattedTextField ftf;

        public MyTableCellEditor() {
            super(new JFormattedTextField());
            ftf = (JFormattedTextField)getComponent();

            ftf.setHorizontalAlignment(JTextField.TRAILING);
            ftf.setFocusLostBehavior(JFormattedTextField.PERSIST);

            //React when the user presses Enter while the editor is
            //active.  (Tab is handled as specified by
            //JFormattedTextField's focusLostBehavior property.)
            ftf.getInputMap().put(KeyStroke.getKeyStroke(
                                            KeyEvent.VK_ENTER, 0),
                                            "check");
            ftf.getActionMap().put("check", new AbstractAction() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    final CodeSymbolTableModel model1 = (CodeSymbolTableModel)(StockDatabaseJDialog.this.jTable1.getModel());
                    final SymbolTableModel model2 = (SymbolTableModel)(StockDatabaseJDialog.this.jTable2.getModel());
                    final String searchedText = ftf.getText().toUpperCase();
                    
                    final int modelIndex1 = model1.findCodeOrSymbol(searchedText);
                    final int modelIndex2 = model2.findSymbol(searchedText);
                    boolean isValid = true;

                    if(modelIndex1 >= 0) {                        
                        if(searchedText.length() > 0) {
                            if(searchedText.equals(ftf.getValue().toString()) == false) {
                                //JOptionPane.showMessageDialog(StockDatabaseJDialog.this, searchedText + " is conflicting with stock exchange server database.", "Conflicting", JOptionPane.INFORMATION_MESSAGE);
                                isValid = false;
                            }
                        }
                    }
                    else if(modelIndex2 >= 0) {
                        if(searchedText.length() > 0) {
                            if(searchedText.equals(ftf.getValue().toString()) == false) {
                                //JOptionPane.showMessageDialog(StockDatabaseJDialog.this, searchedText + " is conflicting with user defined database.", "Conflicting", JOptionPane.INFORMATION_MESSAGE);
                                isValid = false;
                            }
                        }
                    }

                    if(isValid) {
                        try {
                            ftf.commitEdit();
                        } catch (ParseException ex) {
                            log.error("", ex);
                        }
                    }

                    ftf.postActionEvent(); //inform the editor
                }
            });
        }

        //Override to invoke setValue on the formatted text field.
        public Component getTableCellEditorComponent(JTable table,
                Object value, boolean isSelected,
                int row, int column) {
            JFormattedTextField _ftf =
                (JFormattedTextField)super.getTableCellEditorComponent(
                    table, value, isSelected, row, column);
            _ftf.setValue(value);
            return _ftf;
        }

        //Override to ensure that the value remains an Integer.
        @Override
        public Object getCellEditorValue() {
            JFormattedTextField _ftf = (JFormattedTextField)getComponent();
            Object o = _ftf.getValue();
            if(o == null) return null;

            return Symbol.newInstance(o.toString().toUpperCase());
        }

        //Override to check whether the edit is valid,
        //setting the value if it is and complaining if
        //it isn't.  If it's OK for the editor to go
        //away, we need to invoke the superclass's version 
        //of this method so that everything gets cleaned up.
        @Override
        public boolean stopCellEditing() {
            JFormattedTextField _ftf = (JFormattedTextField)getComponent();
            final CodeSymbolTableModel model1 = (CodeSymbolTableModel)(StockDatabaseJDialog.this.jTable1.getModel());
            final SymbolTableModel model2 = (SymbolTableModel)(StockDatabaseJDialog.this.jTable2.getModel());
            final String searchedText = _ftf.getText().toUpperCase();
            final int modelIndex1 = model1.findCodeOrSymbol(searchedText);
            final int modelIndex2 = model2.findSymbol(searchedText);
            boolean isValid = true;

            if(modelIndex1 >= 0) {
                if(searchedText.length() > 0) {
                    if(searchedText.equals(_ftf.getValue().toString()) == false) {
                        JOptionPane.showMessageDialog(StockDatabaseJDialog.this, searchedText + " is conflicting with stock exchange server database.", "Conflicting", JOptionPane.INFORMATION_MESSAGE);
                        selectStockExchangeServerDatabaseTable(modelIndex1);
                        isValid = false;
                    }
                }
            }
            else if(modelIndex2 >= 0) {
                if(searchedText.length() > 0) {
                    if(searchedText.equals(_ftf.getValue().toString()) == false) {
                        JOptionPane.showMessageDialog(StockDatabaseJDialog.this, searchedText + " is conflicting with user defined database.", "Conflicting", JOptionPane.INFORMATION_MESSAGE);
                        selectUserDefinedDatabaseTable(modelIndex2);
                        isValid = false;
                    }
                }
            }
            
            if (isValid) {
                try {
                    _ftf.commitEdit();
                } catch (ParseException ex) {
                    log.error("", ex);
                }
            }                    

            return super.stopCellEditing();
        }

    }
    
    private class SymbolTableModel extends AbstractTableModel {
        // For fast access.
        private final List<Symbol> symbols;
        
        public SymbolTableModel() {
            symbols = new ArrayList<Symbol>(StockDatabaseJDialog.this.mutableStockCodeAndSymbolDatabase.getUserDefinedSymbol());
        }
        
        public List<Symbol> getSymbols() {
            return Collections.unmodifiableList(symbols);
        }
        
        @Override
        public boolean isCellEditable(int rowIndex, int columnIndex)
        {
            return true;
        }
                
        public void removeRow(int index) {
            symbols.remove(index);
            this.fireTableRowsDeleted(index, index);
        }        
        
        @Override
        public int getRowCount() {
            return symbols.size();
        }

        @Override
        public int getColumnCount() {
            return columnNames.length;
        }

        @Override
        public Object getValueAt(int rowIndex, int columnIndex) {
            switch(columnIndex)
            {
                case 0:
                    return symbols.get(rowIndex);
            }
            
            return null;
        }

        @Override
        public String getColumnName(int col) {
            return columnNames[col];
        }

        @Override
        public Class getColumnClass(int c) {
            return columnClasses[c];
        }
        
        @Override
        public void setValueAt(Object value, int row, int col) {
            Symbol symbol = (Symbol)value;
            
            symbols.remove(row);
            symbols.add(row, symbol);
            fireTableCellUpdated(row, col);
        }
        
        public int findSymbol(String string) {
            return symbols.indexOf(Symbol.newInstance(string));
        }
        
        public int addNewSymbol() {
            Symbol empty = Symbol.newInstance("");
            
            //int index = symbols.indexOf(empty);
            
            //if(index < 0) {
                symbols.add(empty);
                final int index = symbols.size() - 1;
                this.fireTableRowsInserted(index, index);
            //}
            
            return index;
        }
        
        private final String[] columnNames = {"Code or Symbol"};
        private final Class[] columnClasses = {Symbol.class};
    }

    private MutableStockCodeAndSymbolDatabase mutableStockCodeAndSymbolDatabase = null;
    private MutableStockCodeAndSymbolDatabase result = null;
    
    private static final Log log = LogFactory.getLog(StockDatabaseJDialog.class);
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    javax.swing.JButton jButton1;
    javax.swing.JButton jButton2;
    javax.swing.JButton jButton3;
    javax.swing.JButton jButton4;
    javax.swing.JPanel jPanel1;
    javax.swing.JPanel jPanel2;
    javax.swing.JPanel jPanel3;
    javax.swing.JPanel jPanel4;
    javax.swing.JPanel jPanel5;
    javax.swing.JPanel jPanel6;
    javax.swing.JPanel jPanel7;
    javax.swing.JScrollPane jScrollPane1;
    javax.swing.JScrollPane jScrollPane2;
    javax.swing.JTable jTable1;
    javax.swing.JTable jTable2;
    javax.swing.JTextField jTextField1;
    org.jdesktop.swingx.JXHeader jXHeader1;
    // End of variables declaration//GEN-END:variables

}

⌨️ 快捷键说明

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