1

I am sort of new to programming, well at least programming in Java, I am in a class at the moment and I just need someone to point me in a direction.

I am having an issue getting all the JPanels to show up in specific spots on the application screen. The rest should be a piece of cake with all the calculations.

Here is the code that I have done so far:

import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.*;
import java.text.NumberFormat;
import java.awt.GridLayout;

public class MortgageCalculatorGUI7 extends JFrame {

            JPanel panel1 = new JPanel(new FlowLayout());
            JRadioButton b7Yr = new JRadioButton("7 Years",false);
            JRadioButton b15Yr = new JRadioButton("15 Years",false);
            JRadioButton b30Yr = new JRadioButton("30 Years",false);
            JRadioButton b535Int = new JRadioButton("5.35% Interest",false);
            JRadioButton b55Int = new JRadioButton("5.5% Interest",false);
            JRadioButton b575Int = new JRadioButton("5.75% Interest",false);

            JPanel panel2 = new JPanel(new FlowLayout());
            JLabel mortgageLabel = new JLabel("Mortgage Amount $", JLabel.LEFT);
            JTextField mortgageText = new JTextField(10);
            JLabel termLabel = new JLabel("Mortgage Term (Years)", JLabel.LEFT);
            JTextField termText = new JTextField(3);
            JLabel intRateLabel = new JLabel("Interest Rate (%)", JLabel.LEFT);
            JTextField intRateText = new JTextField(5);
            JLabel mPaymentLabel = new JLabel("Monthly Payment $", JLabel.LEFT);
            JTextField mPaymentText = new JTextField(10);

            JPanel panel3 = new JPanel(new FlowLayout());
            JButton calculateButton = new JButton("CALCULATE");
            JButton clearButton = new JButton("CLEAR");
            JButton exitButton = new JButton("EXIT");


            JPanel panel4 = new JPanel(new FlowLayout());
            JLabel paymentLabel = new JLabel ("Payment #");
            JLabel balLabel = new JLabel (" Balance");
            JLabel ytdPrincLabel = new JLabel (" Principal");
            JLabel ytdIntLabel = new JLabel (" Interest");

            JPanel panel5 = new JPanel(new FlowLayout());
            JTextArea textArea = new JTextArea(10, 31);

        public MortgageCalculatorGUI7() {

            this.setLayout (new BorderLayout());
            panel1.setLayout (new FlowLayout());
            panel2.setLayout (new FlowLayout());
            panel3.setLayout (new FlowLayout());
            panel4.setLayout (new FlowLayout());
            panel5.setLayout (new FlowLayout());

            panel1.add (b7Yr);
            panel1.add (b15Yr);
            panel1.add (b30Yr);
            panel1.add (b535Int);
            panel1.add (b55Int);
            panel1.add (b575Int);

            panel2.add (mortgageLabel);
            panel2.add (mortgageText);
            panel2.add (termLabel);
            panel2.add (termText);
            panel2.add (intRateLabel);
            panel2.add (intRateText);
            panel2.add (mPaymentLabel);
            panel2.add (mPaymentText);

            panel3.add (calculateButton);
            panel3.add (clearButton);
            panel3.add (exitButton);

            panel4.add (paymentLabel);
            panel4.add (balLabel);
            panel4.add (ytdPrincLabel);
            panel4.add (ytdIntLabel);

            panel5.add (textArea);

            add(panel2, BorderLayout.NORTH);
            add(panel1, BorderLayout.CENTER);
            add(panel4, BorderLayout.AFTER_LINE_ENDS);
            add(panel5, BorderLayout.EAST);
            add(panel3, BorderLayout.SOUTH);

            exitButton.addActionListener(new ActionListener(){
                public void actionPerformed(ActionEvent e)
                {
                    System.exit(0);
                }});    

        }

    public static void main(String[] args) {

        MortgageCalculatorGUI7 frame = new MortgageCalculatorGUI7();
        frame.setBounds (200,200,800,500);
        frame.setTitle ("Mortgage Calculator 1.0.4");
        frame.setDefaultCloseOperation (EXIT_ON_CLOSE);
        frame.setVisible (true);

    }
}

Thanks for the help in advanced.

mKorbel
  • 109,525
  • 20
  • 134
  • 319
David
  • 31
  • 3

2 Answers2

4

A FlowLayout is only one of many options. I suggest you look at the different Layout Managers available to find one that suits your needs.

brabster
  • 42,504
  • 27
  • 146
  • 186
  • 2
    +1 for the link tot he tutorial. Rarely do you ever use just "one" layout manager. You can use nested panels that can use different layout managers. – camickr Jul 17 '11 at 02:36
1

If your requirements to position components aren't too complex I would suggest you to use null layout to position components exactly using coordinates.

This is a running example:

import javax.swing.*;
import javax.swing.border.*;

public class MortgageCalculatorGUI7 extends JFrame {


    JPanel panel1 = new JPanel();

    public MortgageCalculatorGUI7() {

        getContentPane().setLayout(null);
        setSize(400, 400);

        panel1.setLayout(null);
        panel1.setBounds(0, 0 , 400, 400);
        add(panel1);


        JLabel label1 = new JLabel("a label");
        label1.setBounds(15, 15, 150, 30);
        label1.setBorder(new BevelBorder(BevelBorder.RAISED));
        panel1.add(label1);


        JLabel label2 = new JLabel("a label");
        label2.setBounds(100, 100, 150, 30);
        label2.setBorder(new BevelBorder(BevelBorder.RAISED));
        panel1.add(label2);

        JLabel label3 = new JLabel("a label");
        label3.setBounds(200, 200, 150, 30);
        label3.setBorder(new BevelBorder(BevelBorder.RAISED));
        panel1.add(label3);


    }

    public static void main(String[] args) {
        MortgageCalculatorGUI7 mortgageCalculatorGUI7 = new MortgageCalculatorGUI7();
        mortgageCalculatorGUI7.setDefaultCloseOperation(EXIT_ON_CLOSE);
        mortgageCalculatorGUI7.setVisible(true);

    }

}
Jaime Hablutzel
  • 6,117
  • 5
  • 40
  • 57
  • This is usually considered an a [less desirable approach](http://download.oracle.com/javase/tutorial/uiswing/layout/none.html). – trashgod Jul 17 '11 at 01:32
  • It is true, but... for simple requirements, static forms maybe, it is the way to go if you want your form to be designed quickly, by the way, I would suggest anyone new to swing to use Netbeans swing designer to get used quickly to the possibilities you have with swing, after that, you can get to the code with more confidence. – Jaime Hablutzel Jul 17 '11 at 06:31
  • I second the motion to use the NetBeans GUI designer (or one in Eclipse) otherwise, it is so hard to get the desired layout in code using either absolute positioning or layouts. Here's a link: http://docs.oracle.com/javase/tutorial/uiswing/learn/creatinggui.html – Kaydell Sep 12 '13 at 06:29
  • The NetBeans GUI editor isn't easy either. Layout is just not easy. – Kaydell Sep 12 '13 at 08:00