This may be a stupid question, and one that can be solved by changing the layout that I use for this, but when I run my calculator program, I go until I see that the size of my text area will not stretch to automatically select the size of the panel in it without setting the size on its first creation, and also, how can I bridge this monstrous gap that BorderLayout.CENTER
occupies 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 might mention that 0 is out of center in numArea
(I read in the Java GridBagLayout
about the GridBagLayout
, but didn’t yet have half of my nail in these waters.)
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 necessary changes. He looks a lot cleaner. There is still a small space around the room, but it is nevertheless cleaner. pack()
definitely matters. Thanks for helping everyone!