首先,这是家庭作业,我不是在寻找完整的答案,而是希望对如何做所需的事情有所了解。我正在尝试对齐JFrame中的按钮以使其显示为:
GUI应该是什么样的:

java - JAVA按钮对齐-LMLPHP

但是,从本周起,我对GUI制作还是很陌生。我试图利用FlowLayout,但是最终我得出的结论是,这不是获得所需结果的正确方法。这就是我所拥有的:

当前版本:

java - JAVA按钮对齐-LMLPHP

我现在有办法在下面添加文本框,我想我需要使用网格布局。值得一提的是,我从未使用过网格布局(或者说是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);
  }
}


我希望这对您有用。

10-07 18:55
查看更多