Java - Как я могу предотвратить, чтобы BorderLayout EAST обнимал край экрана? - PullRequest
13 голосов
/ 06 февраля 2010

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

Ответы [ 3 ]

13 голосов
/ 06 февраля 2010

позвоните 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);
    }

}
1 голос
/ 06 февраля 2010

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

0 голосов
/ 06 февраля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...