Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing面板/按钮布局_Java_Swing_Layout Manager_Grid Layout - Fatal编程技术网

Java Swing面板/按钮布局

Java Swing面板/按钮布局,java,swing,layout-manager,grid-layout,Java,Swing,Layout Manager,Grid Layout,我正在创建一个简单的计算器GUI。另外,我在将“帮助”和“退出”按钮的大小调整为数字按钮大小时遇到了问题。我知道我在GridLayout上做错了什么,但不确定是什么。代码没有问题 这就是它看起来的样子: public static final int WIDTH = 350; public static final int HEIGHT = 500; public static final int NUMBER_OF_CHAR = 4; private JTextField single; p

我正在创建一个简单的计算器GUI。另外,我在将“帮助”和“退出”按钮的大小调整为数字按钮大小时遇到了问题。我知道我在
GridLayout
上做错了什么,但不确定是什么。代码没有问题

这就是它看起来的样子:

public static final int WIDTH = 350;
public static final int HEIGHT = 500;
public static final int NUMBER_OF_CHAR = 4;

private JTextField single;
private JTextField equation;
boolean setBlank = false;
Double result;
String resultStr;
String verifyAction = "";
public Calculator()
{
    super("Calculator");
    setSize(WIDTH, HEIGHT);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setLayout(new GridLayout(3,0,0,0));
    JPanel top = new JPanel();
    top.setLayout(new GridLayout(1,2));

    JPanel mid = new JPanel();
    mid.setLayout(new GridLayout(2,1));

    JPanel bottom = new JPanel();
    bottom.setLayout(new GridLayout(4,4));
    //TOP
    JButton exit = new JButton("Exit");
    exit.addActionListener(this);
    top.add(exit);

    JButton help = new JButton("Help");

    help.addActionListener(this);
    top.add(help);
    //MID
    single = new JTextField(NUMBER_OF_CHAR);
    mid.add(single);
    equation = new JTextField(NUMBER_OF_CHAR);
    mid.add(equation);
    //BOTTOM
    String [] key = {"7","8","9","+","4","5","6","","1","2","3","/","0",".","clear","="};
    for(int i = 0 ; i < key.length;i++)
    {
        JButton button = new JButton(key[i]);
        button.addActionListener(this);
        bottom.add(button);
    }
    add(top,BorderLayout.NORTH);
    add(mid,BorderLayout.CENTER);
    add(bottom,BorderLayout.SOUTH);
}

公共静态最终整数宽度=350;
公共静态最终内部高度=500;
公共静态最终整数,字符数=4;
私有JTextField单个;
私有JTextField方程;
布尔setBlank=false;
双重结果;
字符串结果tr;
字符串verifyAction=“”;
公共计算器()
{
超级(“计算器”);
设置尺寸(宽度、高度);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(新网格布局(3,0,0,0));
JPanel top=新的JPanel();
top.setLayout(新网格布局(1,2));
JPanel mid=新的JPanel();
mid.setLayout(新网格布局(2,1));
JPanel bottom=新的JPanel();
底部。setLayout(新的GridLayout(4,4));
//顶
JButton exit=新JButton(“exit”);
exit.addActionListener(this);
添加(退出);
JButton help=新JButton(“help”);
help.addActionListener(这个);
添加(帮助);
//中段
single=新的JTextField(字符数);
mid.add(单个);
方程=新的JTextField(字符数);
mid.add(等式);
//底部
字符串[]键={“7”,“8”,“9”,“+”,“4”,“5”,“6”,“1”,“2”,“3”,“/”,“0”,“清除”,“=”};
for(int i=0;i
这是一个主要问题:
设置大小(宽度、高度)。不要这样做,因为这可能会导致您不希望重新调整大小的组件这样做。而是在添加所有组件后,通过调用顶部窗口JFrame上的
pack()
,将所有组件的大小调整为它们自己的首选大小。同样,这将允许GUI自行调整大小

不要在JPanel中使用GridLayout,而是保留BorderLayout,并使用GUI组件字体。比如说

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Calculator extends JFrame implements ActionListener {
    public static final int WIDTH = 350;
    public static final int HEIGHT = 500;
    public static final int NUMBER_OF_CHAR = 4;
    public static final Font MY_FONT = new Font(Font.DIALOG, Font.BOLD, 24);

    private JTextField single;
    private JTextField equation;
    boolean setBlank = false;
    Double result;
    String resultStr;
    String verifyAction = "";

    public Calculator() {
        super("Calculator");
        // setSize(WIDTH, HEIGHT);  // !! No ***************
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // setLayout(new GridLayout(3, 0, 0, 0)); // !! No ***************
        JPanel top = new JPanel();
        top.setLayout(new GridLayout(1, 2));

        JPanel mid = new JPanel();
        mid.setLayout(new GridLayout(2, 1));

        JPanel bottom = new JPanel();
        bottom.setLayout(new GridLayout(4, 4));
        // TOP
        JButton exit = new JButton("Exit");
        exit.setFont(MY_FONT);
        exit.addActionListener(this);
        top.add(exit);

        JButton help = new JButton("Help");
        help.setFont(MY_FONT);

        help.addActionListener(this);
        top.add(help);
        // MID
        single = new JTextField(NUMBER_OF_CHAR);
        single.setFont(MY_FONT);
        mid.add(single);
        equation = new JTextField(NUMBER_OF_CHAR);
        equation.setFont(MY_FONT);
        mid.add(equation);
        // BOTTOM
        String[] key = { "7", "8", "9", "+", "4", "5", "6", "", "1", "2", "3", "/", "0", ".", "clear", "=" };
        for (int i = 0; i < key.length; i++) {
            JButton button = new JButton(key[i]);
            button.setFont(MY_FONT);
            button.addActionListener(this);
            bottom.add(button);
        }
        add(top, BorderLayout.NORTH);
        add(mid, BorderLayout.CENTER);
        add(bottom, BorderLayout.SOUTH);

        pack();
        setLocationRelativeTo(null);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub

    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            new Calculator().setVisible(true);
            ;
        });
    }
}
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
公共类计算器扩展JFrame实现ActionListener{
公共静态最终整数宽度=350;
公共静态最终内部高度=500;
公共静态最终整数,字符数=4;
公共静态最终字体MY_Font=新字体(Font.DIALOG,Font.BOLD,24);
私有JTextField单个;
私有JTextField方程;
布尔setBlank=false;
双重结果;
字符串结果tr;
字符串verifyAction=“”;
公共计算器(){
超级(“计算器”);
//设置大小(宽度、高度);/!!否***************
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//setLayout(新的GridLayout(3,0,0,0));/!!否***************
JPanel top=新的JPanel();
top.setLayout(新的GridLayout(1,2));
JPanel mid=新的JPanel();
mid.setLayout(新网格布局(2,1));
JPanel bottom=新的JPanel();
bottom.setLayout(新的GridLayout(4,4));
//顶
JButton exit=新JButton(“exit”);
exit.setFont(我的字体);
exit.addActionListener(this);
添加(退出);
JButton help=新JButton(“help”);
help.setFont(我的字体);
help.addActionListener(这个);
添加(帮助);
//中段
single=新的JTextField(字符数);
单个.setFont(我的字体);
mid.add(单个);
方程=新的JTextField(字符数);
方程式.setFont(我的字体);
mid.add(等式);
//底部
字符串[]键={“7”,“8”,“9”,“+”,“4”,“5”,“6”,“1”,“2”,“3”,“/”,“0”,“清除”,“=”};
for(int i=0;i{
新计算器().setVisible(true);
;
});
}
}

您的问题缺少重要信息——您想为初学者创建什么GUI?您当前的代码有哪些问题?1)要更快地获得更好的帮助,请发布或。2) 这就是它看起来的样子:“以最小的尺寸提供ASCII艺术或GUI预期布局的简单绘图,如果可以调整大小,则具有更大的宽度和高度。嗨,我尝试使用pack,但它将GUI的大小调整为分配给它们的整个空间。我想知道的是,如何使“帮助/退出”按钮变成底部数字按钮的大小。@DanielCalderon:另外,不要像现在这样过度依赖GridLayout。以BoxLayout为例,谢谢。我尝试过其他的布局,但对它来说是新的。老师只教我们网格布局,但我在网上读到它并不是真正的推荐。但不知道该用什么来代替。@DanielCalderon:我明白了,你是在用GridLayout来完成整件事——别这么做!然后,您将添加具有BorderLayout约束的组件,这些约束在这种情况下没有意义。谢谢。我删除了第一个gridlayout,它似乎做了更多我想要的事情。我会研究其他形式的布局。非常感谢。