This may be a silly question, and one that can be resolved by changing the Layout I'm using for this, but, when running my calculator program, I'm savvy up until I see that my text area size wont stretch to fit the size of the pane it's in automatically without me setting the size when first creating it, and also, how do I go about eliminating this monstrous gap that BorderLayout.CENTER
is taking up between my button panels?
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class calculatorProg extends JFrame implements ActionListener
{
private Container contents;
private JButton add, subtr, mult, div, pow, pow10, b1, b2, b3, b4, b5, b6, b7, b8, b9, b0;
private JTextArea win;
private JPanel numArea, win1, arithArea, numPlusArith;
private JMenu men;
private JMenuItem menItem;
JSplitPane calcPane;
public calculatorProg()
{
super("Calculator");
contents = getContentPane();
setDefaultCloseOperation(EXIT_ON_CLOSE);
contents.setLayout(new BorderLayout());
//Arithmetic buttons
add = new JButton("+");
subtr = new JButton("-");
mult = new JButton("x");
div = new JButton("/");
pow = new JButton("x^");
pow10 = new JButton("x^10");
//Buttons
b1 = new JButton("1");
b5 = new JButton("5");
b2 = new JButton("2");
b6 = new JButton("6");
b3 = new JButton("3");
b7 = new JButton("7");
b4 = new JButton("4");
b8 = new JButton("8");
b9 = new JButton("9");
b0 = new JButton("0");
//Creating the panels
win = new JTextArea(2, 25);
win.setEditable(false);
win.setVisible(true);
win1 = new JPanel();
win1.setLayout(new FlowLayout(FlowLayout.LEFT));
win1.add(win);
numArea = new JPanel(new GridLayout(0, 3));
arithArea = new JPanel(new GridLayout(3, 3));
arithArea.setSize(new Dimension(8, 8));
numPlusArith = new JPanel(new BorderLayout());
//Adding to num area
numArea.add(b1);
numArea.add(b2);
numArea.add(b3);
numArea.add(b4);
numArea.add(b5);
numArea.add(b6);
numArea.add(b7);
numArea.add(b8);
numArea.add(b9);
numArea.add(b0);
arithArea.add(add);
arithArea.add(subtr);
arithArea.add(div);
arithArea.add(mult);
arithArea.add(pow);
arithArea.add(pow10);
numPlusArith.add(arithArea, BorderLayout.LINE_START);
numPlusArith.add(numArea, BorderLayout.LINE_END);
//Lay out the panes
calcPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, win1, numPlusArith);
calcPane.setOneTouchExpandable(true);
calcPane.setDividerLocation(50);
Dimension minimumSize = new Dimension(100, 50);
win1.setMinimumSize(minimumSize);
numArea.setMinimumSize(minimumSize);
//add to contents
contents.add(calcPane, BorderLayout.CENTER);
setSize(320, 370);
setVisible(true);
}
public static void main(String[] args)
{
calculatorProg cp = new calculatorProg();
}
}
Someone may make mention about the 0 being off center in the numArea
(I read in the Java docs about GridBagLayout
but haven't even had half my toenail into those waters, yet.)
EDIT CODE:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class calculatorProg extends JFrame implements ActionListener {
private Container contents;
private JButton add, subtr, mult, div, pow, pow10, clr, plmi, b1, b2, b3, b4, b5, b6, b7, b8, b9, b0;
private JTextArea win;
private JPanel numArea, win1, arithArea, numPlusArith;
private JMenu men;
private JMenuItem menItem;
JSplitPane calcPane;
public calculatorProg(){
super("Calculator");
contents = getContentPane();
setDefaultCloseOperation(EXIT_ON_CLOSE);
contents.setLayout(new BorderLayout());
//Arithmetic buttons
add = new JButton("+");
subtr = new JButton("-");
mult = new JButton("x");
div = new JButton("/");
pow = new JButton("x^");
pow10 = new JButton("x^10");
//Buttons
b1 = new JButton("1"); b5 = new JButton("5");
b2 = new JButton("2"); b6 = new JButton("6");
b3 = new JButton("3"); b7 = new JButton("7");
b4 = new JButton("4"); b8 = new JButton("8");
b9 = new JButton("9"); b0 = new JButton("0");
clr = new JButton("C"); plmi = new JButton("+/-");
//Creating the panels
win = new JTextArea(2, 25);
win.setLineWrap(true);
win.setWrapStyleWord(true);
win.setEditable(false);
win.setVisible(true);
win1 = new JPanel();
win1.setLayout(new BorderLayout());
win1.add(new JScrollPane(win), BorderLayout.CENTER);
numArea = new JPanel(new GridLayout(0,3));
arithArea = new JPanel(new GridLayout(3, 3));
//arithArea.setSize(new Dimension(8, 8));
numPlusArith = new JPanel(new GridLayout(0, 2, 0, 0));
//Adding to num area
numArea.add(b1); numArea.add(b2);
numArea.add(b3); numArea.add(b4);
numArea.add(b5); numArea.add(b6);
numArea.add(b7); numArea.add(b8);
numArea.add(b9); numArea.add(b0);
numArea.add(clr); numArea.add(plmi);
arithArea.add(add);
arithArea.add(subtr);
arithArea.add(div);
arithArea.add(mult);
arithArea.add(pow);
arithArea.add(pow10);
numPlusArith.add(arithArea);
numPlusArith.add(numArea);
//Lay out the panes
calcPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, win1, numPlusArith);
calcPane.setOneTouchExpandable(true);
calcPane.setDividerLocation(50);
Dimension minimumSize = new Dimension(100, 50);
win1.setMinimumSize(minimumSize);
numArea.setMinimumSize(minimumSize);
//add to contents
contents.add(calcPane, BorderLayout.CENTER);
pack();
setVisible(true);
}
public static void main(String[] args) {
calculatorProg cp = new calculatorProg();
}
private double addition(double a, double b){
a=0.0; b=0.0;
double finAnswer = a + b;
return finAnswer;
}
private double subtraction(double a, double b){
a=0.0; b=0.0;
double finAnswer = a + b;
return finAnswer;
}
private double division(double a, double b){
a=0.0; b=0.0;
double finAnswer = a / b;
return finAnswer;
}
private double multiplication(double a, double b){
a=0.0; b=0.0;
double finAnswer = a * b;
return finAnswer;
}
private double pow(double a, double b){
a=0.0; b=0.0;
double finAnswer = Math.pow(a, b);
return finAnswer;
}
private double pow10(double a){
a = 0.0;
double finAnswer = Math.pow(a, 10);
return finAnswer;
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
}
}
As you can see I made the much needed changes. It looks a lot cleaner. There's still a minor gap around the numbers area, but nonetheless it's cleaner. pack()
definitely makes a difference. Thanks for all the help guys!