2016-12-04 8 views
0

я пытаюсь сделать окно с GridBagLayout, вот мой код:Java GridBagLayout позиционирование

import java.awt.FlowLayout; 
    import java.awt.GridBagConstraints; 
    import java.awt.GridBagLayout; 
    import java.awt.event.ActionEvent; 
    import java.awt.event.ActionListener; 

    import javax.swing.JButton; 
    import javax.swing.JFrame; 
    import javax.swing.JPanel; 
    import javax.swing.JScrollPane; 
    import javax.swing.JTextArea; 

    public class ReadMessage extends JFrame implements ActionListener 
    { 
JButton Last; 
JButton Delete; 
JButton Store; 
JButton Next; 
JTextArea MessageBox; 

public ReadMessage() 
{ 
    setLayout(new FlowLayout()); 
    JPanel Panel = new JPanel(); 
    add(Panel); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    Panel.setLayout(new GridBagLayout()); 
    GridBagConstraints c = new GridBagConstraints(); 


    MessageBox = new JTextArea(); 
    MessageBox.setEditable(false); 
    JScrollPane scrollPane = new JScrollPane(MessageBox, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, 
      JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS); 
    MessageBox.setLineWrap(true); 
    c.gridx = 0; 
    c.gridy = 0; 
    c.gridwidth = 4; 
    c.weightx = 0.0; 
    c.ipady = 300; 
    c.ipadx = 300; 
    Panel.add(scrollPane, c); 


    Last = new JButton("Last"); 
    c.gridx = 0; 
    c.gridy = 1; 
    c.ipady = 0; 
    c.weightx = 0.5; 
    Panel.add(Last, c); 
    Last.addActionListener(this); 

    Delete = new JButton("Delete"); 
    c.gridx = 1; 
    c.gridy = 1; 
    c.ipady = 0; 
    c.weightx = 0.5; 
    Panel.add(Delete, c); 
    Delete.addActionListener(this); 

    Store = new JButton("Store"); 
    c.gridx = 2; 
    c.gridy = 1; 
    c.ipady = 0; 
    c.weightx = 0.5; 
    Panel.add(Store, c); 
    Store.addActionListener(this); 

    Next = new JButton("Next"); 
    c.gridx = 3; 
    c.gridy = 1; 
    c.ipady = 0; 
    c.weightx = 0.5; 
    Panel.add(Next, c); 
    Next.addActionListener(this); 

} 



} 

и получается, что-то вроде этого enter image description here

, что я действительно хочу, как это

enter image description here

Я знаю, что я сделал ужасно неправильно, но я не могу понять, что именно я сделал неправильно, я читал документы на оракула, но не мог фи и что-нибудь, не могли бы вы указать, что я сделал не так, и как это исправить? Большое спасибо

ответ

1

Вы можете вставлять панели каждый с помощью другого менеджера макета для достижения желаемого макета.

  1. Создать основную панель с BorderLayout и добавить эту панель к раме
  2. Добавьте JTextArea к BorderLayout.CENTER главной панели
  3. Создать вторую панель для кнопок и использовать FlowLayout. Затем добавьте кнопки на эту панель. Затем эту панель можно добавить к основной панели на BorderLayout.PAGE_END.
3

Все ваши кнопки имеют ширину сетки 4 вместо 1.

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