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();
         }
      });
   }
}