首先,这是家庭作业,我不是在寻找完整的答案,而是希望对如何做所需的事情有所了解。我正在尝试对齐JFrame中的按钮以使其显示为:
GUI应该是什么样的:
但是,从本周起,我对GUI制作还是很陌生。我试图利用FlowLayout,但是最终我得出的结论是,这不是获得所需结果的正确方法。这就是我所拥有的:
当前版本:
我现在有办法在下面添加文本框,我想我需要使用网格布局。值得一提的是,我从未使用过网格布局(或者说是FlowLayout!)。
如果我了解网格布局,我认为5x8可以工作。它将允许水平和垂直间隔。我的思路是否正确?还是可以继续我目前正在做的事情?
附带的代码适用于那些希望了解我正在使用的工具的人。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ATM extends JFrame {
//create objects to add to JPanel
private JRadioButton radio1 = new JRadioButton("Checking");
private JRadioButton radio2 = new JRadioButton("Savings");
private JButton withdrawBtn = new JButton("Withdraw");
private JButton depositBtn = new JButton("Deposit");
private JButton transferBtn = new JButton("Transfer");
private JButton balanceBtn = new JButton("Balance");
public ATM() {
super("ATM");
setLayout(new BorderLayout());
//add buttons to JPanel
JPanel buttonsPanel1 = new JPanel();
buttonsPanel1.setLayout(new FlowLayout(FlowLayout.CENTER));
buttonsPanel1.add(withdrawBtn);
buttonsPanel1.add(balanceBtn);
add(buttonsPanel1, BorderLayout.NORTH);
JPanel buttonsPanel2 = new JPanel();
buttonsPanel2.add(transferBtn);
buttonsPanel2.add(depositBtn);
add(buttonsPanel2, BorderLayout.CENTER);
JPanel buttonsPanel3 = new JPanel();
buttonsPanel3.add(radio1);
buttonsPanel3.add(radio2);
add(buttonsPanel3, BorderLayout.SOUTH);
/**
*
* @param args
*/}
public static void main (String[] args) {
ATM app = new ATM();
app.setSize(400,300);
app.setVisible(true);
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setLocationRelativeTo(null);
}
}
最佳答案
您有一个不错的代码开始。使用BorderLayout实际上,您可以完成任务。
请注意,您可以在任何Swing容器上调用布局管理器。例如,下面的代码可以帮助您完成工作。
JPanel buttonsPanel3 = new JPanel();
buttonsPanel3.setLayout(new BorderLayout());
buttonsPanel3.add(radio1, BorderLayout.WEST);
buttonsPanel3.add(radio2, BorderLayout.EAST);
buttonsPanel3.add(txtAmount, BorderLayout.SOUTH);
但是,您的代码应如下所示:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ATM extends JFrame {
//create objects to add to JPanel
private JRadioButton radio1 = new JRadioButton("Checking");
private JRadioButton radio2 = new JRadioButton("Savings");
private JButton withdrawBtn = new JButton("Withdraw");
private JButton depositBtn = new JButton("Deposit");
private JButton transferBtn = new JButton("Transfer");
private JButton balanceBtn = new JButton("Balance");
private JTextField txtAmount = new JTextField();
public ATM() {
super("ATM");
setLayout(new BorderLayout());
//add buttons to JPanel
JPanel buttonsPanel1 = new JPanel();
buttonsPanel1.setLayout(new FlowLayout(FlowLayout.CENTER));
buttonsPanel1.add(withdrawBtn);
buttonsPanel1.add(balanceBtn);
add(buttonsPanel1, BorderLayout.NORTH);
JPanel buttonsPanel2 = new JPanel();
buttonsPanel2.add(transferBtn);
buttonsPanel2.add(depositBtn);
add(buttonsPanel2, BorderLayout.CENTER);
JPanel buttonsPanel3 = new JPanel();
buttonsPanel3.setLayout(new BorderLayout());
buttonsPanel3.add(radio1, BorderLayout.WEST);
buttonsPanel3.add(radio2, BorderLayout.EAST);
buttonsPanel3.add(txtAmount, BorderLayout.SOUTH);
add(buttonsPanel3, BorderLayout.SOUTH);
// This method will set adjust the size of the container so it can contain all other controls
pack();
}
public static void main (String[] args) {
ATM app = new ATM();
//app.setSize(400,300);// This line is not very helpful in this situation instead avoid it
app.setVisible(true);
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setLocationRelativeTo(null);
}
}
我希望这对您有用。