Java - Как я могу препятствовать BorderLayout EAST обнимать сторону экрана?

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

Ответы

Ответ 1

вызовите setBorder на свой JButton следующим образом:

setBorder( new EmptyBorder( 3, 3, 3, 3 ) )

Из JavaDoc, EmptyBorder является "прозрачной границей, которая занимает пространство, но не рисует". В моем примере это займет 3 пикселя соответственно сверху, слева, внизу и справа.

Полный код, целью которого является только показать, как использовать EmptyBorder:

import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.border.EmptyBorder;

public class ALineBorder {

    public static void main(String args[]) {
        JFrame frame = new JFrame("Line Borders");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JButton button1 = new JButton("Button1");
        button1.setBorder( new EmptyBorder( 8, 8, 8, 8 ) );
        JButton button2 = new JButton("Button2");
        JButton button3 = new JButton("Button3");
        button3.setBorder( new EmptyBorder( 16, 16, 16, 16 ) );
        Container contentPane = frame.getContentPane();
        contentPane.add(button1, BorderLayout.WEST);
        contentPane.add(button2, BorderLayout.CENTER);
        contentPane.add(button3, BorderLayout.EAST);
        frame.pack();
        frame.setSize(300, frame.getHeight());
        frame.setVisible(true);
    }

}

Ответ 2

Скорее всего, у вас есть (или скоро будет) более одной кнопки в контейнере и вы хотите выровнять их по горизонтали. Поэтому рассмотрите возможность вставки кнопок внутри вложенного JPanel с помощью GridBagLayout:

class ButtonPanel extends JPanel {
    ButtonPanel() {
        setLayout(new GridBagLayout());
    }

    @Override
    public Component add(Component button) {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.gridy = nextGridY++;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.insets = new Insets(3, 3, 3, 3);
        super.add(button, gbc);
        return button;
    }

    int nextGridY;
}

Затем добавьте эту панель в родительский фрейм или панель (с помощью BorderLayout.)

Ответ 3

BorderLayout идет, когда имя говорит границе. Однако вы можете вставлять вещи внутрь, чтобы вы могли вставить JPanel с рамкой, а затем вставить в нее свою кнопку.

Вы также можете поэкспериментировать с дизайнером GUI в Netbeans. Это действительно очень приятно и очень полезно для вещей, которые вы обычно хотите делать (например, иметь границу с границей и т.д.).