关于简单计算器中的布局

您好,我正在尝试自己制作一个具有编码大小,布局等的计算器(试图不使用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(); } } 

这是程序的图片;

在此处输入图像描述

如果你能帮助我,我感激不尽。 不管怎样,谢谢 :)

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

一些建议:

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

例如,

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

您可能希望研究这个遵循@HFOE和@mre建议的示例。 请注意,“大小”在代码中没有出现。

  1. 阅读在容器中布置组件
  2. 实施适当的布局

编辑 –

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