java - 当我更改边框布局时,JPanels 不会四处移动
问题描述
我正在使用 Eclipse 中的 swing 创建一个计算器程序。有几个按钮 0-9、+、-、*、/ 等。到目前为止,我已经创建了 3 个面板。我需要 5 个,我想把它们像
clear / -> Fifth panel
7 8 9 + -> Fourth panel
4 5 6 - -> Third panel
1 2 3 * -> Second panel
0 = . -> First panel
但是按钮是重叠的或者什么的,我不能让它们分开
我尝试了不同的 BorderLayout.____ 但他们仍然没有分开例如:
add(First, BorderLayout.BEFORE_FIRST_LINE);
add(Second, BorderLayout.EAST);
add(Third, BorderLayout.CENTER);
这是我的代码
import java.awt.*;
import javax.swing.*; // swing offers many GUI components
import java.awt.event.*;
public class calculator
{
public static void main (String [] args)
{
GUI myCalc = new GUI();
myCalc.setTitle("Calculator");
myCalc.setSize(350, 500);
myCalc.setVisible(true);
myCalc.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class GUI extends JFrame implements ActionListener, MouseListener
{
JPanel myFirstPanel;
JButton zero, one, two, three, four, five, six, seven, eight, nine,
dot, backspace, plus, minus, multiply, divide, clear;
JLabel msgLabel;
JTextField textBox;
GUI()
{
super();
JPanel First = new JPanel();
JPanel Second = new JPanel();
JPanel Third = new JPanel();
one = new JButton("1");
two = new JButton("2");
three = new JButton("3");
four = new JButton("4");
five = new JButton("5");
six = new JButton("6");
seven = new JButton("7");
eight = new JButton("8");
nine = new JButton("9");
First.add(one);
First.add(two);
First.add(three);
Second.add(four);
Second.add(five);
Second.add(six);
Third.add(seven);
Third.add(eight);
Third.add(nine);
add(First, BorderLayout.BEFORE_FIRST_LINE);
add(Second, BorderLayout.EAST);
add(Third, BorderLayout.CENTER);
add(First);
add(Second);
add(Third);
}
public void actionPerformed(ActionEvent e)
{
}
public void mouseExited(MouseEvent me) // when mouse leaves
{
}
public void mouseEntered(MouseEvent me) // when mouse enters
{
}
public void mouseReleased(MouseEvent me) // when mouse is released after press
{
}
public void mouseClicked(MouseEvent me) // when mouse is clicked
{
}
public void mousePressed(MouseEvent me) // when mouse is pressed and held
{
}
}
我一直只收到 789 个按钮:/ 我是新手,所以任何解释都会有所帮助。谢谢
解决方案
作为“一般”建议,您可以探索其他布局管理器。最终,你会到达一个你想要探索的地步GridBagLayout
。
这是迄今为止最灵活的布局管理器,也是最复杂的。
您应该从如何在容器中布局组件以及如何使用 GridBagLayout开始
import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
setLayout(new GridBagLayout());
// First line
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 3;
gbc.fill = GridBagConstraints.BOTH;
add(new JButton("Clear"), gbc);
gbc.gridwidth = 1;
gbc.gridx = 3;
add(new JButton("/"), gbc);
// Second line
gbc.gridx = 0;
gbc.gridy = 1;
add(new JButton("7"), gbc);
gbc.gridx++;
add(new JButton("8"), gbc);
gbc.gridx++;
add(new JButton("9"), gbc);
gbc.gridx++;
add(new JButton("+"), gbc);
// Third line
gbc.gridx = 0;
gbc.gridy = 2;
add(new JButton("4"), gbc);
gbc.gridx++;
add(new JButton("5"), gbc);
gbc.gridx++;
add(new JButton("6"), gbc);
gbc.gridx++;
add(new JButton("-"), gbc);
// Second line
gbc.gridx = 0;
gbc.gridy = 3;
add(new JButton("1"), gbc);
gbc.gridx++;
add(new JButton("2"), gbc);
gbc.gridx++;
add(new JButton("3"), gbc);
gbc.gridx++;
add(new JButton("*"), gbc);
// Last line
gbc.gridx = 0;
gbc.gridy = 4;
add(new JButton("0"), gbc);
gbc.gridx++;
gbc.gridwidth = 2;
add(new JButton("="), gbc);
gbc.gridx += 2;
gbc.gridwidth = 1;
add(new JButton("."), gbc);
}
}
}
推荐阅读
- php - 使用 Ajax 将 ID 从视图传递到 Codeigniter 中的控制器
- python - 无法在 Flask 上运行正确的文件
- javascript - 使用 PlaceID 获取地点详细信息
- sql - 如何在 PostgreSQL 中生成“假”行以用于 d3.js
- oracle - PLSQL 为什么我的程序没有检测到重复数据的插入?
- kubernetes - 什么是 Kubernetes 的模板字段
- php - php artisan tinker (null) hasmany
- powershell - 如何在完成之前在 PowerShell 中中断和停止 TTS 引擎?
- c# - 每当客户端将完整的对象发送到 C# 中的服务器时,如何获得通知?
- r - 具有命名 ParamSets 的 mlr makeModelMultiplexerParamSet