Проблема выравнивания макета GridBag

Я практиковал GridBagLayout с некоторого времени, но все же я чувствую растерянность, когда хочу получить желаемый результат. Я хочу такой вывод

GUI требуется

но я запутался, создав одну, на которой стол находится с одной стороны, а две кнопки - с другой. Стол сжимается.

Кто-нибудь может дать мне код для выравнивания компонентов (кнопок и таблицы), как это. Ссылки на компоненты: activServer, addFiles и таблица

Заранее спасибо!

РЕДАКТИРОВАТЬ: это код, который я использую (краткий код для иллюстрации только проб)

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class ServerCode extends JFrame
{
    ServerCode()
    {
        JTable table = new JTable(10,3);
        JButton addFiles= new JButton("Add files"),activateServer = new JButton("Activate Button");

        setLayout(new GridBagLayout());

        add(table,new GridBagConstraints(0,0,6,6, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,0,0,0), 0,0));
        add(addFiles,new GridBagConstraints(1,6,2,1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,0,0,0), 0,0));
        add(activateServer,new GridBagConstraints(6,6,2,1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,0,0,0), 0,0));

        setSize(700,400);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setVisible(true);
    }
    public static void main(String...args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new ServerCode();
            }
        });
    }

}

И его вывод:

проблема

2 ответа

Черт, я бы просто использовал BorderLayout для этого. Забудьте GridBagLayout, если он не нужен. Например...

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

@SuppressWarnings("serial")
public class LayoutFoo extends JPanel {
   private static final int PREF_W = 800;

   public LayoutFoo() {

      JPanel buttonPanel = new  JPanel();
      buttonPanel.add(new JButton("Foo"));
      buttonPanel.add(Box.createHorizontalStrut(10));
      buttonPanel.add(new JButton("Bar"));


      String[] columnNames = {"Mon", "Tues", "Wed"};
      DefaultTableModel model = new DefaultTableModel(columnNames, 25);
      JTable table = new JTable(model);
      JScrollPane scrollPane = new JScrollPane(table);
      scrollPane.getViewport().setPreferredSize(table.getPreferredSize());
      // scrollPane.getViewport().setPreferredSize(table.getPreferredScrollableViewportSize());

      JLabel southLabel = new JLabel("Foobars!");
      southLabel.setForeground(Color.white);
      JPanel southPanel = new JPanel();
      southPanel.setBackground(Color.black);
      southPanel.add(southLabel);

      setLayout(new BorderLayout(5, 5));
      add(buttonPanel, BorderLayout.NORTH);
      add(scrollPane, BorderLayout.CENTER );
      add(southPanel, BorderLayout.SOUTH);
   }

   public Dimension getPreferredSize() {
      Dimension superSize = super.getPreferredSize();
      int width = PREF_W > superSize.width ? PREF_W : superSize.width;
      return new Dimension(width, superSize.height);
   }


   private static void createAndShowGUI() {
      LayoutFoo paintEg = new LayoutFoo();

      JFrame frame = new JFrame("Smart File Transfer");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(paintEg);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGUI();
         }
      });
   }
}

Если вы хотите сохранить GridBagLayout, я считаю, что вам нужно что-то вроде этого:

    add(activateServer,new GridBagConstraints(0,0,1,1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0,0,0,0), 0,0));
    add(addFiles,new GridBagConstraints(1,0,1,1, 1.0, 1.0, GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0,0,0,0), 0,0));
    add(table,new GridBagConstraints(0,1,2,1, 1.0, 1.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,0,0,0), 0,0));

если у вас возникли проблемы с использованием создателя GridBagConstraints, попробуйте использовать более простой способ, как в этом примере

для получения дополнительной информации попробуйте документацию оракула

Другие вопросы по тегам