Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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 关于简单计算器中的布局_Java_Swing_Layout_Calculator_Border - Fatal编程技术网

Java 关于简单计算器中的布局

Java 关于简单计算器中的布局,java,swing,layout,calculator,border,Java,Swing,Layout,Calculator,Border,您好,我正在尝试自己制作一个带有编码大小、布局等的计算器(尝试不使用NetBeans,这不是一个家庭作业)。但我面临着一个关于空空间的问题。我有一个文本区和按钮,但正如你在下面看到的,我不能处理这个空间问题。这是我的密码 import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.GridLayout; import javax.swing.JButton; i

您好,我正在尝试自己制作一个带有编码大小、布局等的计算器(尝试不使用NetBeans,这不是一个家庭作业)。但我面临着一个关于空空间的问题。我有一个文本区和按钮,但正如你在下面看到的,我不能处理这个空间问题。这是我的密码

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextArea;

public class calculator extends JFrame {

    public calculator(){

        initComponents();

    }

    private void initComponents(){

        JPanel panelScreen = new JPanel(new GridLayout(0,1));

        JTextArea screen = new JTextArea();
        panelScreen.add(screen);

        JFrame frame = new JFrame("CALCULATOR");
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);

        JPanel panelButtons = new JPanel(new GridLayout(3,3));

        JButton oneButton = new JButton("1");
        panelButtons.add(oneButton);

        JButton twoButton = new JButton("2");
        panelButtons.add(twoButton);

        JButton threeButton = new JButton("3");
        panelButtons.add(threeButton);

        JButton fourButton = new JButton("4");
        panelButtons.add(fourButton);

        JButton fiveButton = new JButton("5");
        panelButtons.add(fiveButton);

        JButton sixButton = new JButton("6");
        panelButtons.add(sixButton);

        JButton sevenButton = new JButton("7");
        panelButtons.add(sevenButton);

        JButton eightButton = new JButton("8");
        panelButtons.add(eightButton);

        JButton nineButton = new JButton("9");
        panelButtons.add(nineButton);

        frame.getContentPane().add(panelScreen, BorderLayout.NORTH);
        //frame.getContentPane().add(new JSeparator(), BorderLayout.CENTER);
        frame.getContentPane().add(panelButtons, BorderLayout.SOUTH);
        frame.setBounds(50, 50, 500, 500);
        frame.setResizable(false);
        //frame.pack();
        frame.setVisible(true);


    }


    public static void main(String[] args) {

        new calculator();

    }

}
这就是节目的画面

如果你能帮助我,我将不胜感激。无论如何,谢谢:)

一些建议:

  • 不要设置JFrame的大小,事实上也不要设置任何大小
  • 调用pack以设置所有组件的大小
  • 如果你希望按钮更大,考虑改变字体的大小。 e、 g

    导入java.awt.BorderLayout;
    导入java.awt.Font;
    导入java.awt.GridLayout;
    导入javax.swing.*;
    公共类Calc2{
    公共静态最终字符串[][]按钮文本={
    {"7", "8", "9", "+"},
    {"4", "5", "6", "-"},
    {"1", "2", "3", "*"},
    {"0", ".", "/", "="}
    };
    公共静态最终字体BTN_Font=新字体(Font.SANS_SERIF,Font.BOLD,24);
    私有静态void createAndShowGui(){
    JTextField=新的JTextField(10);
    field.setFont(BTN_FONT.deriveFont(FONT.PLAIN));
    JPanel btnPanel=新的JPanel(新的网格布局(BUTTON_text.length,
    按钮(文本[0]。长度));
    对于(int i=0;i
  • 阅读
  • 实施适当的布局
  • 编辑-


    快速解决方案-将
    JFrame
    布局管理器替换为
    BoxLayout
    (即
    setLayout(新的BoxLayout(这个,BoxLayout.PAGE_轴))

    您可能希望按照@HFOE和@mre的建议来研究这个问题。请注意,“大小”不在代码中出现。

    import java.awt.*;
    
    import javax.swing.*;
    import javax.swing.border.EmptyBorder;
    
    // no need to extend frame!
    //public class Calculator extends JFrame {
    public class Calculator {
    
        public Calculator(){    
            initComponents();    
        }
    
        private void initComponents(){
            // I find it easier to create a panel and SET it as the content pane
            JPanel gui = new JPanel(new BorderLayout(5,5));
            // add some padding to the main GUI
            gui.setBorder(new EmptyBorder(4,4,4,4));
    
            // not needed if only a single compoinent is to be added!
            //JPanel panelScreen = new JPanel(new GridLayout(0,1));
    
            // add some constraints to make the output field bigger.
            // if it is intended to be single line, a JTextField should be used.
            JTextArea screen = new JTextArea(2,25);
            gui.add(screen, BorderLayout.NORTH);
            //panelScreen.add(screen);
    
            JFrame frame = new JFrame("CALCULATOR");
            frame.setContentPane(gui);
    
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            // add padding around the buttons
            JPanel panelButtons = new JPanel(new GridLayout(3,3,4,4));
    
            JButton oneButton = new JButton("1");
            panelButtons.add(oneButton);
    
            JButton twoButton = new JButton("2");
            panelButtons.add(twoButton);
    
            JButton threeButton = new JButton("3");
            panelButtons.add(threeButton);
    
            JButton fourButton = new JButton("4");
            panelButtons.add(fourButton);
    
            JButton fiveButton = new JButton("5");
            panelButtons.add(fiveButton);
    
            JButton sixButton = new JButton("6");
            panelButtons.add(sixButton);
    
            JButton sevenButton = new JButton("7");
            panelButtons.add(sevenButton);
    
            JButton eightButton = new JButton("8");
            panelButtons.add(eightButton);
    
            JButton nineButton = new JButton("9");
            panelButtons.add(nineButton);
    
            //frame.getContentPane().add(new JSeparator(), BorderLayout.CENTER);
    
            // Add the buttons to the CENTER and they will
            // fill whatever space they are provided.
            gui.add(panelButtons, BorderLayout.CENTER);
            //frame.setBounds(50, 50, 500, 500);
            //frame.setResizable(false);
            frame.pack();
            frame.setVisible(true); 
        }    
    
        public static void main(String[] args) {    
           java.awt.EventQueue.invokeLater(new Runnable() {
    
             @Override
             public void run() {
                new Calculator();
             }
           });    
        }    
    }
    

    但是如果我不调整JFrame的大小,它的大小就会非常小。我想要更大的带有文本区域的按钮?再次,设置字体,但不要设置大小,否则您将看到上面的问题,并且在其他操作系统或具有不同屏幕分辨率的此操作系统上运行时,您将具有不兼容的GUI。请看上面的编辑。@安德鲁:请做一个屏幕截图。:)事实上,我5分钟前刚刚完成了那篇教程:D。然后我开始制作这个计算器。@quartaela:这就是方法,我正在尝试,但我遇到了一些错误。顺便说一下,我将再次阅读boxlayout教程。:)无论如何,谢谢你可以看看这是怎么做的。它可能不完全是您使用所需的,但可能会给您一些想法。顺便问一下,“0”在哪里?你是那些认为0不是数字的人吗?我的第二个小妹妹就在那里(概念上)。哈哈,我只是想处理borders布局。等等,当然我会添加其他内容:D。但感谢提醒:D注意,
    BorderLayout
    是一种用于对其中包含的组件进行组件定位的布局,而
    EmptyBorder
    是包围组件(面板)的边框。这是否为您消除了任何困惑,或者我误解了您的问题?
    import java.awt.*;
    
    import javax.swing.*;
    import javax.swing.border.EmptyBorder;
    
    // no need to extend frame!
    //public class Calculator extends JFrame {
    public class Calculator {
    
        public Calculator(){    
            initComponents();    
        }
    
        private void initComponents(){
            // I find it easier to create a panel and SET it as the content pane
            JPanel gui = new JPanel(new BorderLayout(5,5));
            // add some padding to the main GUI
            gui.setBorder(new EmptyBorder(4,4,4,4));
    
            // not needed if only a single compoinent is to be added!
            //JPanel panelScreen = new JPanel(new GridLayout(0,1));
    
            // add some constraints to make the output field bigger.
            // if it is intended to be single line, a JTextField should be used.
            JTextArea screen = new JTextArea(2,25);
            gui.add(screen, BorderLayout.NORTH);
            //panelScreen.add(screen);
    
            JFrame frame = new JFrame("CALCULATOR");
            frame.setContentPane(gui);
    
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            // add padding around the buttons
            JPanel panelButtons = new JPanel(new GridLayout(3,3,4,4));
    
            JButton oneButton = new JButton("1");
            panelButtons.add(oneButton);
    
            JButton twoButton = new JButton("2");
            panelButtons.add(twoButton);
    
            JButton threeButton = new JButton("3");
            panelButtons.add(threeButton);
    
            JButton fourButton = new JButton("4");
            panelButtons.add(fourButton);
    
            JButton fiveButton = new JButton("5");
            panelButtons.add(fiveButton);
    
            JButton sixButton = new JButton("6");
            panelButtons.add(sixButton);
    
            JButton sevenButton = new JButton("7");
            panelButtons.add(sevenButton);
    
            JButton eightButton = new JButton("8");
            panelButtons.add(eightButton);
    
            JButton nineButton = new JButton("9");
            panelButtons.add(nineButton);
    
            //frame.getContentPane().add(new JSeparator(), BorderLayout.CENTER);
    
            // Add the buttons to the CENTER and they will
            // fill whatever space they are provided.
            gui.add(panelButtons, BorderLayout.CENTER);
            //frame.setBounds(50, 50, 500, 500);
            //frame.setResizable(false);
            frame.pack();
            frame.setVisible(true); 
        }    
    
        public static void main(String[] args) {    
           java.awt.EventQueue.invokeLater(new Runnable() {
    
             @Override
             public void run() {
                new Calculator();
             }
           });    
        }    
    }