Java 关于简单计算器中的布局
您好,我正在尝试自己制作一个带有编码大小、布局等的计算器(尝试不使用NetBeans,这不是一个家庭作业)。但我面临着一个关于空空间的问题。我有一个文本区和按钮,但正如你在下面看到的,我不能处理这个空间问题。这是我的密码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
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();
}
}
这就是节目的画面
如果你能帮助我,我将不胜感激。无论如何,谢谢:)一些建议:
导入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();
}
});
}
}