Java: дополнительное пространство в AbsoluteLayout - PullRequest
0 голосов
/ 01 марта 2012

Возможно ли иметь дополнительное пространство по краям JFrame, который использует AbsoluteLayout?Когда у меня есть кнопка как самый нижний компонент в JFrame, она располагается прямо напротив нижнего края окна JFrame, и это выглядит плохо.Я хотел бы знать, есть ли способ добавить немного дополнительного пространства между компонентами и краем JFrame при использовании AbsoluteLayout.

Ответы [ 3 ]

2 голосов
/ 01 марта 2012

Предложения:

  • Когда вы добавляете компонент в JFrame, вы фактически добавляете его в contentPane JFrame.Чтобы придать contentPane «буферную» границу, рассмотрите возможность присвоения ей EmptyBorder (...) с параметрами, являющимися константами int для количества границы, требуемой вокруг компонента.
  • Избегайте использования «абсолютных» макетов для чего-либо, особенно для размещения компонентов в легко размещаемых местах для менеджеров компоновки, например в нижней части графического интерфейса.

Например,обратите внимание на графический интерфейс пользователя, созданный в коде ниже, как центральные и нижние элементы JPanel не выходят на край графического интерфейса из-за пустой границы:

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

import javax.swing.*;

public class ButtonAtBottom {
   private static void createAndShowGui() {
      JPanel bottomPanel = new JPanel();
      bottomPanel.add(new JButton("Bottom Button"));
      bottomPanel.setBorder(BorderFactory.createTitledBorder("Bottom Panel"));

      JPanel centerPanel = new JPanel();
      centerPanel.setBorder(BorderFactory.createTitledBorder("Center Panel"));


      JPanel mainPanel = new JPanel(new BorderLayout());
      mainPanel.add(centerPanel, BorderLayout.CENTER);
      mainPanel.add(bottomPanel, BorderLayout.PAGE_END);

      // **** here I add the border to the mainPanel which I'll 
      // make into the contentPane
      int eb = 25;
      mainPanel.setBorder(BorderFactory.createEmptyBorder(eb, eb, eb, eb));

      // don't set the preferredSize per Kleopatra, but am doing it
      // here simply to make code shorter for this sscce
      mainPanel.setPreferredSize(new Dimension(500, 400));

      JFrame frame = new JFrame("ButtonAtBottom");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setContentPane(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}
0 голосов
/ 01 марта 2012

Установите пустую рамку на панели содержимого, где SIZE - это количество отступов, которое вы хотите.

JFrame frame = new JFrame();
JPanel panel = new JPanel(null);
panel.setBorder(BorderFactory.createEmptyBorder(SIZE,SIZE,SIZE,SIZE);
frame.setContentPane(panel); 
//The rest

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

0 голосов
/ 01 марта 2012

Вы можете использовать Box.createRigidArea (размеры), чтобы создать пустое пространство, которое можно добавить под кнопкой.

...