关于简单计算器中的布局

时间:2011-10-19 15:51:23

标签: java swing layout calculator border

在那里,我试图用自己制作一个具有编码大小,布局等的计算器(试图不使用NetBeans,它不是一个功课)。但我面临着空地问题。我有一个TextArea和Buttons,但正如你在下面看到我无法处理这个空间问题。这是我的代码,

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();

    }

}

这是程序的图片;

enter image description here

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

4 个答案:

答案 0 :(得分:5)

一些建议:

  1. 不要设置JFrame的大小,实际上不要设置任何大小。
  2. 将包调用到所有组件以设置自己的大小。
  3. 如果您想要更大的按钮,请考虑更改其字体的大小。
  4. 如,

    Calc2 GUI

    import java.awt.BorderLayout;
    import java.awt.Font;
    import java.awt.GridLayout;
    
    import javax.swing.*;
    
    public class Calc2 {
       public static final String[][] BUTTON_TEXTS = {
          {"7", "8", "9", "+"},
          {"4", "5", "6", "-"},
          {"1", "2", "3", "*"},
          {"0", ".", "/", "="}
       };
       public static final Font BTN_FONT = new Font(Font.SANS_SERIF, Font.BOLD, 24);
    
       private static void createAndShowGui() {
          JTextField field = new JTextField(10);
          field.setFont(BTN_FONT.deriveFont(Font.PLAIN));
          JPanel btnPanel = new JPanel(new GridLayout(BUTTON_TEXTS.length,
                BUTTON_TEXTS[0].length));
    
          for (int i = 0; i < BUTTON_TEXTS.length; i++) {
             for (int j = 0; j < BUTTON_TEXTS[i].length; j++) {
                JButton btn = new JButton(BUTTON_TEXTS[i][j]);
                btn.setFont(BTN_FONT);
                btnPanel.add(btn);
             }
          }
    
          JPanel mainPanel = new JPanel(new BorderLayout());
          mainPanel.add(field, BorderLayout.PAGE_START);
          mainPanel.add(btnPanel, BorderLayout.CENTER);
    
    
          JFrame frame = new JFrame("Calc2");
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          frame.getContentPane().add(mainPanel);
          frame.pack();
          frame.setLocationRelativeTo(null);
          frame.setVisible(true);
       }
    
       public static void main(String[] args) {
          SwingUtilities.invokeLater(new Runnable() {
             public void run() {
                createAndShowGui();
             }
          });
       }
    }
    

答案 1 :(得分:4)

  1. 阅读Laying Out Components Within a Container
  2. 实施适当的布局
  3. 编辑 -

    快速解决方案 - 将JFrame布局管理器替换为BoxLayout(即setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS)))。

答案 2 :(得分:4)

您可能希望按照@HFOE和@mre的建议研究此example。请注意,代码中没有“大小”。

答案 3 :(得分:4)

Calculator GUI

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();
         }
       });    
    }    
}