Существует несколько различных команд для явного выравнивания элементов в Java Swing. Похоже, что эти команды работают только с некоторыми чрезвычайно специфическими ограничениями, и эти ограничения нигде не документируются. Большую часть времени, когда я хочу выравнивать элементы, эти команды ничего не делают. Поэтому мне интересно, почему эти команды не выполняют то, что в документации говорит, что они делают, а также, как выравнивать элементы в Swing?Java Swing Почему выравнивание работает только иногда?
Для справки, здесь находится SSCCE с кнопкой OK, которая выравнивается влево, когда мы явно устанавливаем горизонтальное выравнивание по центру.
import javax.swing.*;
import java.awt.*;
public class E {
public static void main(String[] args) {
JFrame frame = new JFrame();
JPanel notificationView = new JPanel();
notificationView.setPreferredSize(new Dimension(300, 145));
notificationView.setLayout(new GridBagLayout());
JPanel content = new JPanel();
content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
JLabel notificationText = new JLabel("Here is some text to display to the user and below this is an ok button.");
content.add(notificationText);
JButton buttonOkNotification = new JButton("OK");
//buttonOkNotification.setHorizontalAlignment(JLabel.CENTER); // does not do anything
//buttonOkNotification.setAlignmentX(Component.CENTER_ALIGNMENT); // does not do anything
content.add(buttonOkNotification);
notificationView.add(content);
frame.add(notificationView);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
Те составные свойства не имеют значения для разметки, они используются только намекнуть компонент, как использовать его площадь. Они могут быть использованы, например, контролируйте выравнивание текста в JTextField. Они не изменяют способ компоновки компонента в контейнере. Для менеджеров макета см. Https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html – Durandal
1) * «Для справки, вот SSCCE ..» * Нет, это фрагмент кода, который несовместим. Пожалуйста, внимательно прочитайте ** документы на [MCVE] и [Short, Self Contained, Correct Example] (http://www.sscce.org/). 2) См. [Я должен избегать использования методов Set (Preferred | Maximum | Minimum) в Java Swing?] (Http://stackoverflow.com/q/7229226/418556) (Да.) 3) Предоставить искусство ASCII или простой чертеж * предполагаемого * макета GUI при минимальном размере и возможность изменения размера, с большей шириной и высотой. 4) Обратите внимание, что вызовы, вызываемые на кнопке, должны выровнять ** содержимое кнопки **, а не сама кнопка. –
1) Я не включил объявление класса, чтобы сохранить его минимальным, но теперь я его отредактировал. 2) Я не использую ни один из методов, на которые ссылается ваша ссылка.3) Хорошо, я сделаю отдельный вопрос о том, как добиться определенного взгляда на мой конкретный встроенный графический интерфейс. 4) Это фактически отвечает на общий вопрос, который я разместил здесь, спасибо. –