Hello everyone,

I'm at a loss. I've been trying to add a couple of images to my mortgage loan program for class. Everything I try either doesn't work or blanks out the screen. Any help would be appreciated:

/*
* Author: Diana Salisbury
* Week: 4
* Date: March 20, 2006
* Filename: MortPayCal.java
* Purpose: This project will display a graphical user interface that calculates
a mortgage payment amount and amortization schedule from user input amounts, terms, and interest rates. The three combinations of terms and interest rates for the loan are loaded from a file.
*/

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.text.NumberFormat;
import java.text.DecimalFormat;
import java.io.*;
import javax.swing.JOptionPane;
import java.lang.*;
import java.util.Arrays;


public class MortCalAmtDLSWK5Image extends JFrame implements ActionListener
{

//declare layout components
JPanel contentPane = new JPanel();
JLabel instructionLabel = new JLabel();
JLabel instructionLabel2 = new JLabel();
JLabel instructionLabel3 = new JLabel();
JLabel termLabel = new JLabel();
JLabel rateLabel = new JLabel();
JLabel paymentLabel = new JLabel();
JLabel salaryLabel = new JLabel();
JLabel salaryFormatLabel = new JLabel();
JLabel qualifyLabel = new JLabel();
JLabel amountLabel = new JLabel();
JLabel amountFormatLabel = new JLabel();
JLabel calcLabel = new JLabel();
JLabel tableLabel = new JLabel();

//declare text fields

JTextField termField = new JTextField(20);
JTextField rateField = new JTextField(20);
JTextField amountField = new JTextField(20);
JTextField salaryField = new JTextField(20);
JTextField paymentField= new JTextField(20);
JTextField qualifyField = new JTextField(20);

//declare variable for images and images
int qualify = 0;
Image homeImage = Toolkit.getDefaultToolkit().getImage("home.jpg");
Image noImage = Toolkit.getDefaultToolkit().getImage("no.jpg");
//Icon icon = new ImageIcon("home.jpg");
// JButton homeButton = new JButton();

//Icon icon2 = new ImageIcon("no.jpg");
//JButton noButton = new JButton();


//declare variables and array
String[] FileArray = new String[6];

//declare button objects
JButton clearButton = new JButton();
JButton calcButton = new JButton();
JButton quitButton = new JButton();

//declare text area for amortization
JTextArea amortTextArea = new JTextArea();
JTextArea testTextArea = new JTextArea();

//declare scroll bar for amortization table
JScrollPane scrollPane = new JScrollPane(amortTextArea,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);

public MortCalAmtDLSWK5Image()
{
//Set up the frame features
super("Mortgage Payment Calculator");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);

try
{
//Create the file reading object
BufferedReader reader = new BufferedReader(new FileReader("e:\\LoanChoices.txt"));

for (int i = 0; i<6; i++)
{
// Read from the file
FileArray = reader.readLine( );
}

//close file
reader.close();
}

catch (IOException e)
{
System.out.println("There was an input/output error.");
}

int intTerm1=Integer.parseInt(FileArray[0]);
double dblInterest1=Double.parseDouble(FileArray[1]);
int intTerm2=Integer.parseInt(FileArray[2]);
double dblInterest2=Double.parseDouble(FileArray[3]);
int intTerm3=Integer.parseInt(FileArray[4]);
double dblInterest3=Double.parseDouble(FileArray[5]);

// Create Menu
MenuBar mnuBar=new MenuBar();
setMenuBar(mnuBar);

Menu mnuFile = new Menu("File",true);
mnuBar.add(mnuFile);
MenuItem mnuExit = new MenuItem("Exit");
mnuFile.add(mnuExit);

Menu mnuRateTerm = new Menu("Rate and Term",true);
mnuBar.add(mnuRateTerm);
MenuItem mnuChoice1 = new MenuItem(FileArray[0] + "% and " + FileArray[1] + " Years");
mnuRateTerm.add(mnuChoice1);
MenuItem mnuChoice2 = new MenuItem(FileArray[2] + "% and " + FileArray[3] + " Years");
mnuRateTerm.add(mnuChoice2);
MenuItem mnuChoice3 = new MenuItem(FileArray[4] + "% and " + FileArray[5] + " Years");
mnuRateTerm.add(mnuChoice3);

// add the ActionListener to each menu
mnuExit.addActionListener(this);
mnuChoice1.addActionListener(this);
mnuChoice2.addActionListener(this);
mnuChoice3.addActionListener(this);

// set command actions
mnuExit.setActionCommand("Exit");
mnuChoice1.setActionCommand("Choice1");
mnuChoice2.setActionCommand("Choice2");
mnuChoice3.setActionCommand("Choice3");

instructionLabel.setText("Input the term, rate, and amount fields in the appropriate fields.");
instructionLabel.setFont(new Font("Century",Font.ITALIC,14));
instructionLabel2.setText("OR");
instructionLabel2.setFont(new Font("Century",Font.BOLD + Font.ITALIC,18));
instructionLabel3.setText("Select a predefined term and rate from the Window option above & input amount.");
instructionLabel3.setFont(new Font("Century",Font.ITALIC,14));
amountField.requestFocusInWindow(); //set focus on amount field
termLabel.setText("Enter term length in years:");
rateLabel.setText("Enter interest rate:");
salaryLabel.setText("Enter your yearly salary:");
salaryFormatLabel.setText("Enter salary to nearest whole dollar.");
salaryFormatLabel.setFont(new Font("Century",Font.ITALIC,12));
calcLabel.setText("Press Calculate to determine monthly payment or Clear to start all over.");
calcLabel.setFont(new Font("Century",Font.ITALIC,14));
amountLabel.setText("Enter mortgage amount:");
amountFormatLabel.setText("Enter mortgage amountto the nearest whole dollar.");
amountFormatLabel.setFont(new Font("Century",Font.ITALIC,12));
calcButton.setText("Calculate"); //define calculate button
calcButton.addActionListener(this); //set action listener for calculate button
paymentLabel.setText("Monthly payment:"); //define monthly payment label
paymentField.setEditable(false); //set monthly payment field to not be editable
qualifyField.setText("");
qualifyField.setEditable(false); //set qualify field to not be editable
clearButton.setText("Clear"); //define clear button
clearButton.addActionListener(this); //set action listener for clear button
quitButton.setText("Quit"); //define quit button
quitButton.addActionListener(this); //set action listener for quit button
tableLabel.setText("Amoritization Table");

//add components to content
getContentPane().add(contentPane);
contentPane.setLayout(null);

addComponent(contentPane, instructionLabel, 50,10,450,26);
addComponent(contentPane, instructionLabel2, 250,30,450,26);
addComponent(contentPane, instructionLabel3, 50,50,550,26);
addComponent(contentPane, termLabel, 35,75,200,30);
addComponent(contentPane, termField, 195,75,25,20);
addComponent(contentPane, rateLabel, 35,100,200,30);
addComponent(contentPane, rateField, 195,100,40,20);
addComponent(contentPane, amountLabel, 35,125,220,25);
addComponent(contentPane, amountField, 195,125,75,25);
addComponent(contentPane, amountFormatLabel, 275,120,300,30);
addComponent(contentPane, salaryLabel, 35,150,250,25);
addComponent(contentPane, salaryField, 195,150,75,25);
addComponent(contentPane, salaryFormatLabel, 275,150,300,25);
addComponent(contentPane, calcLabel, 35,175,500,30);
addComponent(contentPane, calcButton, 100,215,100,30);
addComponent(contentPane, clearButton, 250,215,100,30);
addComponent(contentPane, quitButton, 400,215,100,30);
addComponent(contentPane, paymentLabel, 35,275,200,30);
addComponent(contentPane, paymentField, 150,275,75,20);
addComponent(contentPane, qualifyField, 300,260,125,40);
addComponent(contentPane, tableLabel, 200,325,300,26);
addComponent(contentPane, scrollPane, 50,325,500,300);

addWindowListener(new WindowAdapter()

{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});

pack();
}

//method to add components
private void addComponent(Container container, Component c, int x, int y, int width, int height)
{

//get the image from the file
c.setBounds(x, y, width, height);
container.add(c);
}

//action performed method
public void actionPerformed(ActionEvent event)
{
String arg = event.getActionCommand();
if (arg == "Exit")
{
System.exit(0);
}

if (arg == "Choice1")
{
rateField.setText(FileArray[1]);
termField.setText(FileArray[0]);
}

if (arg == "Choice2")
{
rateField.setText(FileArray[3]);
termField.setText(FileArray[2]);
}

if (arg == "Choice3")
{
rateField.setText(FileArray[5]);
termField.setText(FileArray[4]);
}

Object source = event.getSource();

if (source == calcButton)
{
Calculate();
}

if (source == clearButton)
{
Clear();
}

if (source == quitButton)
{
Exit();
}

}

void Calculate()
{
//calculation variables
NumberFormat currency = NumberFormat.getCurrencyInstance();

double totalMonths = 0; //total months
double Loan = 0.0; //amount of loan
double MonthlyInterest = 0.0; //monthly interest rate
double Payment = 0.0; //calculate payment
double monthlyPayment = 0.0; //calculate monthly payment
double Interest = 0.0; //variable for Interest Array input
double Term = 0; //variable for Term Array input
double NewMonthlyInterest = 0.0; //new interest amount
double NewLoan = 0.0; //new loan amount
double Reduction = 0.0; //principle reduction
double salary = 0.0; //yearly salary
double monthlySalary = 0.0; //monthly salary
double perSal = 0.0; //28% of salary

//validate input
try
{
Interest = Double.parseDouble(rateField.getText());
}

catch (NumberFormatException e)
{
JOptionPane.showMessageDialog(null,"Invalid entry. Please enter valid rate (without percent symbol).","Error",JOptionPane.WARNING_MESSAGE);

//clears fields after error message
rateField.setText("");
rateField.requestFocusInWindow();
}

try
{
Term = Double.parseDouble(termField.getText());
}

catch (NumberFormatException e)
{
JOptionPane.showMessageDialog(null,"Invalid Entry. Please enter valid term in years.", "Error", JOptionPane.WARNING_MESSAGE);

//resets input fields after error message
termField.setText("");
termField.requestFocusInWindow();
}
try
{
Loan = Double.parseDouble(amountField.getText());
}

catch (NumberFormatException e)
{
JOptionPane.showMessageDialog(null,"Invalid Entry. Please enter valid loan amount.", "Error", JOptionPane.WARNING_MESSAGE);

//resets input fields after error message
amountField.setText("");
amountField.requestFocusInWindow();
}
try
{
salary = Double.parseDouble(salaryField.getText());
}

catch (NumberFormatException e)
{
JOptionPane.showMessageDialog(null,"Invalid Entry. Please enter valid yearly salary.", "Error", JOptionPane.WARNING_MESSAGE);

//resets input fields after error message
termField.setText("");
termField.requestFocusInWindow();
}


//calculations
if (Loan > 0)
{
MonthlyInterest = (Interest / 12)/100;
totalMonths = Term * 12;
monthlyPayment = Loan * MonthlyInterest *(Math.pow((1 + MonthlyInterest), totalMonths)/(Math.pow((1 + MonthlyInterest), totalMonths)-1));

paymentField.setText("" + currency.format(monthlyPayment));

monthlySalary = salary / 12;
perSal = monthlySalary * .28;

if(perSal >= monthlyPayment)
{
qualifyField.setText("You qualify!");
qualifyField.setFont(new Font("Century", Font.BOLD, 18));
qualifyField.setForeground(Color.red);
qualify = 11;

}
else if(perSal < monthlyPayment)
{
qualifyField.setText("Sorry");
qualifyField.setFont(new Font("Century", Font.BOLD + Font.ITALIC, 30));
qualifyField.setForeground(Color.black);
qualify = 22;


}
}


//send information to amortization text area
amortTextArea.append("Number\t");
amortTextArea.append(" Amount\t");
amortTextArea.append("Interest\t");
amortTextArea.append("Principle\t");
amortTextArea.append("Balance\n");

NewLoan = Loan;

for (int i = 1; i <= totalMonths; i++)
{
NewMonthlyInterest = MonthlyInterest * NewLoan;
Reduction = monthlyPayment - NewMonthlyInterest;
NewLoan = NewLoan - Reduction;

amortTextArea.append(" " + i +"\t");
amortTextArea.append(" " + currency.format(monthlyPayment) + "\t");
amortTextArea.append(" " + currency.format(NewMonthlyInterest)+ "\t");
amortTextArea.append(" " + currency.format(Reduction) + "\t");
amortTextArea.append(" " + currency.format(NewLoan) + "\n");
}


//resets fields if loan amount is less than zero
if((Loan <= 0 || Term <= 0 || Interest <= 0))
{
paymentField.setText("");
amortTextArea.setText("");
setVisible(true);
}
}
public void paint(Graphics g)
{

super.paint(g);

if (qualify == 11)
{
homeImage = Toolkit.getDefaultToolkit().getImage("homeImage.gif");
g.drawImage(homeImage, 0, 0,null);
}

if (qualify == 22)
{
noImage = Toolkit.getDefaultToolkit().getImage("noImage.gif");
g.drawImage(noImage, 0, 0,null);
}
}

void Clear()
{

amountField.setText("");
amountField.requestFocusInWindow();
termField.setText("");
rateField.setText("");
salaryField.setText("");
paymentField.setText("");
qualifyField.setText("");
amortTextArea.setText("");
}


public static void main(String args[])
{
MortCalAmtDLSWK5Image f = new MortCalAmtDLSWK5Image();
f.setTitle("Mortgage Calculator");
f.setBounds(200,50,600,700);
f.setResizable(true);
f.setVisible(true);
}

void Exit()
{
System.exit(0);
}

Drawing on the same surface as all the other crap will cause glitching and all kinds of crap. I suggest you extend JPanel in an external class and make your own definition for the drawing surface and then add it to the real jframe. That will make things much easier to maintain and will work how you want it to.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.