Если я добавлю компоненты, такие как JButton
на восточную или западную сторону, как я могу помешать ей обхватить сторону экрана? Я хочу некоторое пространство между JButton
и краем экрана.
Java - Как я могу препятствовать BorderLayout EAST обнимать сторону экрана?
Ответ 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. Это действительно очень приятно и очень полезно для вещей, которые вы обычно хотите делать (например, иметь границу с границей и т.д.).