Java - Как я препятствую тому, чтобы BorderLayout на восток обнял сторону экрана?

Если я добавляю компоненты как JButtons на Восточной или Западной стороне, как я препятствую тому, чтобы он обнял сторону экрана? Я хочу некоторое пространство между JButtons и край экрана.

13
задан Nathan 15 September 2017 в 16:55
поделиться

3 ответа

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

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

Из JavaDoc пустая рамка - это "прозрачная рамка, которая занимает место, но не рисует". В моем примере она должна занимать 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);
    }

}
13
ответ дан 2 December 2019 в 00:31
поделиться

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

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

0
ответ дан 2 December 2019 в 00:31
поделиться

Скорее всего, у вас есть (или скоро будет) несколько кнопок в контейнере, и вы хотите выровнять их по горизонтали. Поэтому рассмотрите возможность размещения кнопок во вложенной 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 . )

1
ответ дан 2 December 2019 в 00:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: