Во-первых, это домашнее задание, я не ищу полного ответа, но я надеюсь получить представление о том, как делать то, что нужно. Я пытаюсь выровнять кнопки в JFrame, чтобы выглядеть как, например: Какой графический интерфейс должен выглядеть следующим образом:JAVA Button Alignment
Однако, будучи новым для 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);
}
}
Возможно, вы захотите изучить «GridBagLayout» или даже «SpringLayout». И если вы еще этого не видели, [это очень полезно] (https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html) Также пара семантики: BorderLayout.NORTH считается ['old fashioned'] (https://docs.oracle.com/javase/tutorial/uiswing/layout/border.html), а комментарий чуть выше «основного» - прикосновение странно. –
Прежде всего, избавьтесь от 'app.setSize (400,300);' или любого 'setSize (...)' или 'setPreferredSize (...)'. Используйте менеджеров компоновки, вызовите 'pack()' на вашем JFrame после добавления всех компонентов, а затем установите его видимым. –
BTW - * «ATM Machine» *. Для банкоматов используется автоматическая банкомат, что на самом деле означает * «Автоматический машинный аппарат ** **» *. –