简体   繁体   English

如何消除BorderLayout.CENTER占用的差距?

[英]How do I eliminating the gap that BorderLayout.CENTER is taking up?

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? 这可能是一个愚蠢的问题,可以通过更改我正在使用的布局来解决这个问题,但是,当运行我的计算器程序时,我很精明,直到我看到我的文本区域大小不会伸展到适合它的大小是自动的,没有我在第一次创建它时设置大小,而且,我如何消除BorderLayout.CENTER在我的按钮面板之间占用的这个巨大差距?

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.) 有人可能会提到在numArea偏离0的中心(我在Java文档中读到了关于GridBagLayout但是我甚至没有把一半的脚趾带到那些水域中。)

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. pack()绝对有所作为。 Thanks for all the help guys! 谢谢你所有的帮助!

Thanks for the SSCCE, +1 for that. 感谢SSCCE,+1。 All that's missing is the actionPerformed method (you were also missing the last } until the recent edit). 所有缺少的是actionPerformed方法(在最近的编辑之前你也错过了最后一个}

In any case, your problem is that you're using FlowLayout for the panel that contains your JTextArea . 在任何情况下,您的问题是您正在将FlowLayout用于包含JTextArea的面板。 Change these lines: 改变这些行:

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

to this: 对此:

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

You may also notice that I wrapped the text area in a scroll pane. 您可能还注意到我将文本区域包装在滚动窗格中。 This will make it so that any text overflow is scrollable. 这将使任何文本溢出都可滚动。 You should also add in the following lines to turn on line-wrapping: 您还应添加以下行以打开换行:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM