How to bridge the gap that BorderLayout.CENTER occupies?

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!

+4
source share
1 answer

Thanks for SSCCE, +1 for this. All that is missing is the actionPerformed method (you also skipped the last one } until recent editing).

Anyway, your problem is that you are using FlowLayout for the panel containing your JTextArea . Change these lines:

 win1.setLayout(new FlowLayout(FlowLayout.LEFT)); win1.add(win); 

:

 win1.setLayout(new BorderLayout()); win1.add(new JScrollPane(win), BorderLayout.CENTER); 

You may also notice that I wrapped the text area in the scroll bar. This will cause any text overflow to scroll. You must also add the following lines to enable line wrapping:

 win = new JTextArea(2, 25); win.setLineWrap(true); win.setWrapStyleWord(true); 
+1
source

Source: https://habr.com/ru/post/1502237/


All Articles