Java GUI将按钮移动到页面底部
我想知道如何将我的按钮移动到框架/窗口的底部 我现在得到的是: 我希望它看起来像这样: 这是我的密码:Java GUI将按钮移动到页面底部,java,swing,user-interface,button,layout-manager,Java,Swing,User Interface,Button,Layout Manager,我想知道如何将我的按钮移动到框架/窗口的底部 我现在得到的是: 我希望它看起来像这样: 这是我的密码: import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.Font; public class checkbook{ static
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Font;
public class checkbook{
static JButton Button[] = new JButton[8];
JLabel begin, accountName, balance;
JFrame frame;
JPanel jpanel, jpanel1;
Container contentPane;
private JTextField textAccount, textBalance;
public static void main(String[] args){
checkbook checkbook = new checkbook();
checkbook.startFrame();
}
checkbook(){
frame = new JFrame("Checkbook");
}
public void startFrame(){
String bottomButtons[] = {
"Create a New Account", "Load Trans from a file", "Add New Transactions", "Search Transactions",
"Sort Transactions", "View/Delete Transactions", "Backup Transactions", "Exit"
};
Container contentPane = frame.getContentPane();
contentPane.setLayout(new FlowLayout());
Font beginFont = new Font("Arial", Font.PLAIN + Font.BOLD, 22);
textAccount = new JTextField(" ", 15);
textBalance = new JTextField("0.0", 15);
begin = new JLabel("Use The Buttons below To Manage Transactions");
begin.setFont(beginFont);
contentPane.add(begin);
//Container contentPane1 = frame.getContentPane();
//contentPane1.setLayout(new FlowLayout());
JPanel jpanel = new JPanel();
accountName = new JLabel ("Account Name: ");
jpanel.add(accountName);
jpanel.add(textAccount);
balance = new JLabel ("Balance: ");
jpanel.add(balance);
jpanel.add(textBalance);
JPanel jpanel1 = new JPanel();
jpanel1.setLayout(new GridLayout(2,4));
for(int i = 0; i < 8; i++){
Button[i] = new JButton(bottomButtons[i]);
jpanel1.add(Button[i]);
//Button[i].addActionListener(AL);
}
frame.pack();
frame.setSize(800, 300);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.add(jpanel);
frame.add(jpanel1);
}
}
import javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.Font;
公共类支票簿{
静态JButton按钮[]=新JButton[8];
JLabel begin、账户名、余额;
JFrame框架;
JPanel JPanel,jpanel1;
容器内容窗格;
私人JTextField textcount,textBalance;
公共静态void main(字符串[]args){
支票簿支票簿=新支票簿();
checkbook.startFrame();
}
支票簿{
框架=新的JFrame(“支票簿”);
}
公共无效开始框架(){
字符串底部按钮[]={
“创建新帐户”、“从文件加载交易”、“添加新交易”、“搜索交易”,
“对事务进行排序”、“查看/删除事务”、“备份事务”、“退出”
};
容器contentPane=frame.getContentPane();
setLayout(新的FlowLayout());
Font beginFont=新字体(“Arial”,Font.PLAIN+Font.BOLD,22);
textAccount=新的JTextField(“,15);
textBalance=新的JTextField(“0.0”,15);
begin=new JLabel(“使用下面的按钮管理事务”);
begin.setFont(beginFont);
contentPane.add(开始);
//容器contentPane1=frame.getContentPane();
//contentPane1.setLayout(新的FlowLayout());
JPanel JPanel=新的JPanel();
accountName=新的JLabel(“帐户名称:”);
jpanel.add(账户名称);
jpanel.add(textcount);
余额=新的JLabel(“余额:”);
jpanel.add(余额);
jpanel.add(文本余额);
JPanel jpanel1=新的JPanel();
设置布局(新的网格布局(2,4));
对于(int i=0;i<8;i++){
按钮[i]=新的JButton(底部按钮[i]);
jpanel1.add(按钮[i]);
//按钮[i].addActionListener(AL);
}
frame.pack();
框架设置尺寸(800300);
frame.setresizeable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.add(jpanel);
frame.add(jpanel1);
}
}
所以我想知道我该怎么做才能把按钮移到底部。我是否必须使用BorderLayout
和BorderLayout.SOUTH
等,或者是否有办法使用我已有的GridLayout
实现这一点。如果我必须使用BorderLayout
我将如何保持按钮的顺序(2行4列)
我必须使用BorderLayout和BorderLayout.SOUTH吗
是的,但最好的答案是你试试看会发生什么。你为什么不呢
如果我必须使用BorderLayout,我将如何保持按钮的顺序(2行4列)
Nest JPanels。使用JPanel将按钮置于GridLayout中,并将JPanel BorderLayout.SOUTH或更好的BorderLayout.PAGE_置于末尾
e、 g
显示为:
您使用的是什么IDE?为什么不使用拖放功能来更改按钮的位置。@KaranSharma:因为这样你就不会了解布局管理器以及如何使用它们。代码生成应用程序非常好,但除非您熟悉底层GUI库。我正在使用JGrasp,是的,我知道我可以使用Eclipse之类的工具来“绘制”我所需要的所有内容,但由于这是我正在进行的一个学期项目,我宁愿手工编写代码,看看它是如何工作的。基本上就是满是鳗鱼的气垫船所说的。很抱歉,如果我错误地插入了代码,我不知道如何插入它,而不必在每行代码前面输入4个空格。选择整个代码示例的文本,然后单击消息发布/编辑表单顶部的
{}
按钮。啊,谢谢,我会试试的!因此,为了澄清,我必须为我的gridlayout制作一个JPanel,然后再制作一个JPanel,将JPanel w/gridlayout放在底部。目前,我很难弄清楚如何嵌套JPanel,这看起来很容易,但出于某种原因,我无法理解这个概念。你能给我举个例子吗?@Alternateralm:举个例子
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import javax.swing.*;
@SuppressWarnings("serial")
public class NestedPanels extends JPanel {
private static final String TITLE_TEXT = "Use The Buttons Below To Manage Transactions";
private static final String[] BTN_TEXTS = { "Create a New Account",
"Load a Trans from a File", "Add New Transactions",
"Search Transactions", "Sort Transactions",
"View/Delete Transactions", "Backup Transaction", "Exit" };
private static final int TITLE_POINTS = 24;
public NestedPanels() {
JLabel titleLabel = new JLabel(TITLE_TEXT, SwingConstants.CENTER);
titleLabel.setFont(titleLabel.getFont().deriveFont(Font.BOLD,
TITLE_POINTS));
JPanel titlePanel = new JPanel();
titlePanel.add(titleLabel); // put it in a JPanel so it will expand to fill BoxLayout
JPanel accountBalancePanel = new JPanel();
accountBalancePanel.add(new JLabel("Account Name:"));
accountBalancePanel.add(new JTextField(10));
accountBalancePanel.add(Box.createHorizontalStrut(20));
accountBalancePanel.add(new JLabel("Balance:"));
accountBalancePanel.add(new JTextField(10));
JPanel northPanel = new JPanel();
northPanel.setLayout(new BoxLayout(northPanel, BoxLayout.PAGE_AXIS));
northPanel.add(titlePanel);
northPanel.add(accountBalancePanel);
JPanel southBtnPanel = new JPanel(new GridLayout(2, 4, 1, 1));
for (String btnText : BTN_TEXTS) {
southBtnPanel.add(new JButton(btnText));
}
setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
setLayout(new BorderLayout());
add(northPanel, BorderLayout.NORTH);
add(Box.createRigidArea(new Dimension(400, 400))); // just an empty placeholder
add(southBtnPanel, BorderLayout.SOUTH);
}
private static void createAndShowGui() {
NestedPanels mainPanel = new NestedPanels();
JFrame frame = new JFrame("Nested Panels Example");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}