/* * NewLoanDialog.java * * Copyright (c) 2009 Jay Lawson <jaylawson39 at yahoo.com>. All rights reserved. * * This file is part of MekHQ. * * MekHQ 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 3 of the License, or * (at your option) any later version. * * MekHQ 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 MekHQ. If not, see <http://www.gnu.org/licenses/>. */ package mekhq.gui.dialog; import java.awt.BorderLayout; import java.awt.Frame; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.GregorianCalendar; import java.util.ResourceBundle; import javax.swing.BorderFactory; import javax.swing.DefaultComboBoxModel; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.JTextField; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import megamek.common.util.EncodeControl; import mekhq.campaign.Campaign; import mekhq.campaign.finances.Finances; import mekhq.campaign.finances.Loan; import mekhq.campaign.rating.IUnitRating; import mekhq.campaign.rating.UnitRatingFactory; /** * @author Taharqa */ public class NewLoanDialog extends javax.swing.JDialog implements ActionListener, ChangeListener { private static final long serialVersionUID = -8038099101234445018L; private Frame frame; private Loan loan; private Campaign campaign; private DecimalFormat formatter; private int rating; private long maxCollateralValue; // Variables declaration - do not modify//GEN-BEGIN:variables private JPanel panMain; private JPanel panInfo; private JPanel panBtn; private JButton btnCancel; private JButton btnAdd; private JTextField txtName; private JTextField txtNumber; private JTextField txtPrincipal; private JButton btnPlusTenMillion; private JButton btnMinusTenMillion; private JButton btnPlusMillion; private JButton btnMinusMillion; private JButton btnPlusHundredK; private JButton btnMinusHundredK; private JButton btnPlusTenK; private JButton btnMinusTenK; private JSlider sldInterest; private JSlider sldCollateral; private JSlider sldLength; private JComboBox<String> choiceSchedule; private JLabel lblAPR; private JLabel lblCollateralPct; private JLabel lblYears; private JLabel lblSchedule; private JLabel lblPrincipal; private JLabel lblFirstPayment; private JLabel lblPayAmount; private JLabel lblNPayment; private JLabel lblTotalPayment; private JLabel lblCollateralAmount; /** * Creates new form NewLoanDialog */ public NewLoanDialog(java.awt.Frame parent, boolean modal, Campaign c) { super(parent, modal); this.frame = parent; campaign = c; IUnitRating unitRating = UnitRatingFactory.getUnitRating(campaign); unitRating.reInitialize(); rating = unitRating.getModifier(); loan = Loan.getBaseLoanFor(rating, campaign.getCalendar()); maxCollateralValue = campaign.getFinances().getMaxCollateral(campaign); formatter = new DecimalFormat(); initComponents(); setLocationRelativeTo(parent); } private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; panMain = new javax.swing.JPanel(); panInfo = new javax.swing.JPanel(); panBtn = new javax.swing.JPanel(); lblAPR = new JLabel(); lblCollateralPct = new JLabel(); lblYears = new JLabel(); lblSchedule = new JLabel(); lblPrincipal = new JLabel(); lblFirstPayment = new JLabel(); lblPayAmount = new JLabel(); lblNPayment = new JLabel(); lblTotalPayment = new JLabel(); lblCollateralAmount = new JLabel(); ResourceBundle resourceMap = ResourceBundle.getBundle("mekhq.resources.NewLoanDialog", new EncodeControl()); //$NON-NLS-1$ setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setName("Form"); // NOI18N setTitle(resourceMap.getString("title")); getContentPane().setLayout(new BorderLayout()); panMain.setLayout(new GridBagLayout()); panBtn.setLayout(new GridLayout(0, 2)); txtName = new javax.swing.JTextField(loan.getInstitution()); txtName.getDocument().addDocumentListener(new DocumentListener() { public void changedUpdate(DocumentEvent e) { changeInstitution(); } public void removeUpdate(DocumentEvent e) { changeInstitution(); } public void insertUpdate(DocumentEvent e) { changeInstitution(); } public void changeInstitution() { loan.setInstitution(txtName.getText()); } }); txtNumber = new javax.swing.JTextField(loan.getRefNumber()); txtNumber.getDocument().addDocumentListener(new DocumentListener() { public void changedUpdate(DocumentEvent e) { changeRefNumber(); } public void removeUpdate(DocumentEvent e) { changeRefNumber(); } public void insertUpdate(DocumentEvent e) { changeRefNumber(); } public void changeRefNumber() { loan.setRefNumber(txtNumber.getText()); } }); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panMain.add(new JLabel(resourceMap.getString("lblName.text")), gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panMain.add(txtName, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; gridBagConstraints.gridwidth = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panMain.add(new JLabel("Reference Number:"), gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panMain.add(txtNumber, gridBagConstraints); txtPrincipal = new javax.swing.JTextField(formatter.format(loan.getPrincipal())); txtPrincipal.setEditable(false); btnPlusTenMillion = new JButton("+10mil"); btnMinusTenMillion = new JButton("-10mil"); btnPlusMillion = new JButton("+1mil"); btnMinusMillion = new JButton("-1mil"); btnPlusHundredK = new JButton("+100K"); btnMinusHundredK = new JButton("-100K"); btnPlusTenK = new JButton("+10K"); btnMinusTenK = new JButton("-10K"); checkMinusButtons(); btnPlusTenMillion.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { adjustPrincipal(10000000); } }); btnMinusTenMillion.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { adjustPrincipal(-10000000); } }); btnPlusMillion.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { adjustPrincipal(1000000); } }); btnMinusMillion.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { adjustPrincipal(-1000000); } }); btnPlusHundredK.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { adjustPrincipal(100000); } }); btnMinusHundredK.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { adjustPrincipal(-100000); } }); btnPlusTenK.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { adjustPrincipal(10000); } }); btnMinusTenK.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { adjustPrincipal(-10000); } }); JPanel plusPanel = new JPanel(new GridLayout(2, 4)); plusPanel.add(btnPlusTenMillion); plusPanel.add(btnPlusMillion); plusPanel.add(btnPlusHundredK); plusPanel.add(btnPlusTenK); plusPanel.add(btnMinusTenMillion); plusPanel.add(btnMinusMillion); plusPanel.add(btnMinusHundredK); plusPanel.add(btnMinusTenK); setSliders(); sldInterest.addChangeListener(this); sldCollateral.addChangeListener(this); sldLength.addChangeListener(this); DefaultComboBoxModel<String> scheduleModel = new DefaultComboBoxModel<String>(); for (int i = 0; i < Finances.SCHEDULE_NUM; i++) { scheduleModel.addElement(Finances.getScheduleName(i)); } choiceSchedule = new JComboBox<String>(scheduleModel); choiceSchedule.setSelectedIndex(loan.getPaymentSchedule()); choiceSchedule.addActionListener(this); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; gridBagConstraints.gridwidth = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panMain.add(new JLabel("Principal:"), gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 2; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panMain.add(txtPrincipal, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 3; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panMain.add(plusPanel, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 4; gridBagConstraints.gridwidth = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panMain.add(new JLabel("Annual Interest:"), gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 4; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panMain.add(sldInterest, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 5; gridBagConstraints.gridwidth = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panMain.add(new JLabel("Collateral:"), gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 5; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panMain.add(sldCollateral, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 6; gridBagConstraints.gridwidth = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panMain.add(new JLabel("Length (years):"), gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 6; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panMain.add(sldLength, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 7; gridBagConstraints.gridwidth = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panMain.add(new JLabel("Payment Schedule:"), gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 7; gridBagConstraints.gridwidth = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panMain.add(choiceSchedule, gridBagConstraints); setUpInfo(); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 8; gridBagConstraints.gridwidth = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); panMain.add(panInfo, gridBagConstraints); btnAdd = new JButton(resourceMap.getString("btnOkay.text")); // NOI18N btnAdd.setName("btnOK"); // NOI18N btnAdd.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { addLoan(); } }); panBtn.add(btnAdd); btnCancel = new JButton(resourceMap.getString("btnCancel.text")); // NOI18N btnCancel.setName("btnClose"); // NOI18N btnCancel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { cancel(); } }); gridBagConstraints.gridx = 1; gridBagConstraints.gridwidth = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.CENTER; gridBagConstraints.insets = new java.awt.Insets(5, 5, 0, 0); panBtn.add(btnCancel); getContentPane().add(panMain, BorderLayout.CENTER); getContentPane().add(panBtn, BorderLayout.PAGE_END); pack(); } private void setUpInfo() { panInfo.setLayout(new GridLayout()); panInfo.setBorder(BorderFactory.createTitledBorder("Loan Details")); refreshValues(); JPanel panLeft = new JPanel(new GridBagLayout()); JPanel panRight = new JPanel(new GridBagLayout()); GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2); panLeft.add(new JLabel("APR:"), gridBagConstraints); gridBagConstraints.gridx = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; panLeft.add(lblAPR, gridBagConstraints); gridBagConstraints.gridx = 0; gridBagConstraints.gridy++; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panLeft.add(new JLabel("Collateral %:"), gridBagConstraints); gridBagConstraints.gridx = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; panLeft.add(lblCollateralPct, gridBagConstraints); gridBagConstraints.gridx = 0; gridBagConstraints.gridy++; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panLeft.add(new JLabel("Length:"), gridBagConstraints); gridBagConstraints.gridx = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; panLeft.add(lblYears, gridBagConstraints); gridBagConstraints.gridx = 0; gridBagConstraints.gridy++; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panLeft.add(new JLabel("Schedule:"), gridBagConstraints); gridBagConstraints.gridx = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; panLeft.add(lblSchedule, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2); panRight.add(new JLabel("Principal Amount:"), gridBagConstraints); gridBagConstraints.gridx = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; panRight.add(lblPrincipal, gridBagConstraints); gridBagConstraints.gridx = 0; gridBagConstraints.gridy++; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panRight.add(new JLabel("First Payment Due:"), gridBagConstraints); gridBagConstraints.gridx = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; panRight.add(lblFirstPayment, gridBagConstraints); gridBagConstraints.gridx = 0; gridBagConstraints.gridy++; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panRight.add(new JLabel("Installment Amount:"), gridBagConstraints); gridBagConstraints.gridx = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; panRight.add(lblPayAmount, gridBagConstraints); gridBagConstraints.gridx = 0; gridBagConstraints.gridy++; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panRight.add(new JLabel("Number of Payments:"), gridBagConstraints); gridBagConstraints.gridx = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; panRight.add(lblNPayment, gridBagConstraints); gridBagConstraints.gridx = 0; gridBagConstraints.gridy++; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panRight.add(new JLabel("Total Amount:"), gridBagConstraints); gridBagConstraints.gridx = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; panRight.add(lblTotalPayment, gridBagConstraints); gridBagConstraints.gridx = 0; gridBagConstraints.gridy++; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panRight.add(new JLabel("Collateral Amount:"), gridBagConstraints); gridBagConstraints.gridx = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; panRight.add(lblCollateralAmount, gridBagConstraints); gridBagConstraints.gridx = 0; gridBagConstraints.gridy++; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; panRight.add(new JLabel("Max Collateral Value:"), gridBagConstraints); gridBagConstraints.gridx = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.NONE; gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; panRight.add(new JLabel(formatter.format(maxCollateralValue)), gridBagConstraints); panInfo.add(panLeft); panInfo.add(panRight); } private void refreshLoan(long principal) { // Modify loan settings loan.setPrincipal(principal); loan.setRate((int) sldInterest.getValue()); loan.setCollateral((int) sldCollateral.getValue()); loan.setYears((int) sldLength.getValue()); loan.setSchedule(choiceSchedule.getSelectedIndex()); loan.setInstitution(txtName.getText()); loan.setRefNumber(txtNumber.getText()); // Recalculate information based on settings loan.setNextPayment((GregorianCalendar)campaign.getCalendar().clone()); loan.setFirstPaymentDate(); loan.calculateAmortization(); // Refresh dialog values refreshValues(); } private void refreshValues() { txtPrincipal.setText(formatter.format(loan.getPrincipal())); lblAPR.setText(loan.getInterestRate() + "%"); lblCollateralPct.setText(loan.getCollateralPercent() + "%"); lblYears.setText(loan.getYears() + " years"); lblSchedule.setText(Finances.getScheduleName(loan.getPaymentSchedule())); lblPrincipal.setText(formatter.format(loan.getPrincipal())); lblFirstPayment.setText(SimpleDateFormat.getDateInstance().format(loan.getNextPayDate())); lblPayAmount.setText(formatter.format(loan.getPaymentAmount())); lblNPayment.setText(formatter.format(loan.getRemainingPayments())); lblTotalPayment.setText(formatter.format(loan.getRemainingValue())); lblCollateralAmount.setText(formatter.format(loan.getCollateralAmount())); } private void addLoan() { if (maxCollateralValue < loan.getCollateralAmount()) { JOptionPane.showMessageDialog(frame, "The collateral amount of this loan is higher than the total value of assets", "Collateral Too High", JOptionPane.ERROR_MESSAGE); return; } campaign.addLoan(loan); this.setVisible(false); } private void cancel() { this.setVisible(false); } private void setSliders() { if (campaign.getCampaignOptions().useLoanLimits()) { int[] interest = Loan.getInterestBracket(rating); sldInterest = new JSlider(interest[0], interest[2], loan.getInterestRate()); if (interest[2] - interest[0] > 30) { sldInterest.setMajorTickSpacing(10); } else { sldInterest.setMajorTickSpacing(5); } sldInterest.setPaintTicks(true); sldInterest.setPaintLabels(true); int[] collateral = Loan.getCollateralBracket(rating); sldCollateral = new JSlider(collateral[0], collateral[2], loan.getCollateralPercent()); if (collateral[2] - collateral[0] > 50) { sldCollateral.setMajorTickSpacing(20); } else { sldCollateral.setMajorTickSpacing(10); } sldCollateral.setPaintTicks(true); sldCollateral.setPaintLabels(true); sldLength = new JSlider(1, Loan.getMaxYears(rating), loan.getYears()); sldLength.setMajorTickSpacing(1); sldLength.setPaintTicks(true); sldLength.setPaintLabels(true); } else { sldInterest = new JSlider(0, 100, loan.getInterestRate()); sldInterest.setMajorTickSpacing(10); sldInterest.setPaintTicks(true); sldInterest.setPaintLabels(true); sldCollateral = new JSlider(0, 300, loan.getCollateralPercent()); sldCollateral.setMajorTickSpacing(50); sldCollateral.setPaintTicks(true); sldCollateral.setPaintLabels(true); sldLength = new JSlider(1, 10, loan.getYears()); sldLength.setMajorTickSpacing(1); sldLength.setPaintTicks(true); sldLength.setPaintLabels(true); } } @Override public void actionPerformed(ActionEvent e) { refreshLoan(loan.getPrincipal()); } @Override public void stateChanged(ChangeEvent e) { if (campaign.getCampaignOptions().useLoanLimits()) { if (e.getSource() == sldInterest) { sldCollateral.removeChangeListener(this); sldCollateral.setValue(Loan.recalculateCollateralFromInterest(sldInterest.getValue(), rating)); sldCollateral.addChangeListener(this); } else if (e.getSource() == sldCollateral) { sldInterest.removeChangeListener(this); sldInterest.setValue(Loan.recalculateInterestFromCollateral(sldCollateral.getValue(), rating)); sldInterest.addChangeListener(this); } } refreshLoan(loan.getPrincipal()); } private void adjustPrincipal(long value) { long newPrincipal = loan.getPrincipal() + value; refreshLoan(newPrincipal); checkMinusButtons(); } private void checkMinusButtons() { btnMinusTenMillion.setEnabled(loan.getPrincipal() > 10000000); btnMinusMillion.setEnabled(loan.getPrincipal() > 1000000); btnMinusHundredK.setEnabled(loan.getPrincipal() > 100000); btnMinusTenK.setEnabled(loan.getPrincipal() > 10000); } }