有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何消除边界布局的间隙。中心正在占用?

这可能是一个愚蠢的问题,可以通过更改我用于此目的的布局来解决,但是,当运行我的计算器程序时,我很精明,直到我发现我的文本区域大小不会自动拉伸以适应它所在窗格的大小,而无需我在第一次创建它时设置大小,而且,我该如何消除按钮面板之间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();
    }
}

有人可能会提到0在numArea中偏离中心(我在Java文档中读到了关于GridBagLayout的内容,但我甚至还没有把一半的脚趾甲伸进这些水域。)

编辑代码:

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

}

}

正如你所看到的,我做了非常必要的改变。看起来干净多了。在数字方面仍然有一个小的差距,但是它更干净pack()肯定会有所不同。谢谢大家的帮助


共 (1) 个答案

  1. # 1 楼答案

    感谢SSCCE,+1。缺少的只是actionPerformed方法(在最近的编辑之前,您还缺少最后一个}

    在任何情况下,您的问题是您正在使用FlowLayout作为包含JTextArea的面板。更改这些行:

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

    为此:

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

    您可能还注意到,我将文本区域包装在滚动窗格中。这将使任何文本溢出都可以滚动。还应添加以下行以启用换行:

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