2014-11-29 2 views
0

Мне было интересно, как я переместил бы свои кнопки в нижней части рамки/окна.Java GUI Перемещение кнопок в нижней части страницы

То, что я сейчас это:

И то, что я хочу, чтобы выглядеть так:

Вот мой код:

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


    } 
} 

Так что мне было интересно, что бы я сделал o переместите кнопки вниз. Должен ли я использовать BorderLayout и использовать BorderLayout.SOUTH и т. Д., Или есть способ сделать это с помощью GridLayout, который у меня уже есть. Если мне нужно использовать BorderLayout, как я буду держать свои кнопки в порядке (2 строки, 4 столбца).

+0

Какой IDE ты используешь ? И почему вы не используете функцию перетаскивания, чтобы изменить расположение кнопок. –

+0

@KaranSharma: потому что тогда вы не узнаете о менеджерах компоновки и о том, как их использовать. Приложения с генерированием кода великолепны, но только тогда, когда вы хорошо знакомы с базовой библиотекой графического интерфейса. –

+0

Я использую JGrasp, и да, я знаю, что я могу использовать что-то вроде Eclipse, чтобы просто «нарисовать» все, что мне нужно, но так как это для семестрового проекта, над которым я работаю, я бы предпочел написать код вручную чтобы увидеть, как это работает. В основном именно то, что сказал Hovercraft Full Of Eels. – AlternateRealm

ответ

2

Я Бы использовать BorderLayout и использовать BorderLayout.SOUTH

Да, но лучший ответ для Вас, чтобы попробовать и посмотреть, что происходит. Почему бы и нет?

Если мне нужно использовать BorderLayout, как бы я держу свои кнопки в порядке (2 строки, 4 столбца).

Nest JPanels. Поместите кнопки в GridLayout, используя JPanel, и место, которое JPanel BorderLayout.SOUTH, или лучше, BorderLayout.PAGE_END

например,

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

Который показывает, как:

enter image description here

+0

Ahhh Спасибо, я попробую! – AlternateRealm

+0

Чтобы уточнить, мне нужно будет сделать JPanel для моего gridlayout, затем ДРУГОЙ JPanel, чтобы положить JPanel w/GridLayout внизу. – AlternateRealm

+0

На данный момент мне трудно понять, как вложить Jpanels, это кажется очень легким, но по какой-то причине я не могу окунуться в эту концепцию. Можете ли вы привести мне пример? – AlternateRealm

Смежные вопросы