Выравнивание компонентов в панели - PullRequest
0 голосов
/ 24 мая 2019

Мне нужно выровнять компоненты (2 JTextField s и 1 JTextArea) по вертикали в JPanel, затем расположить эту панель в центре уже определенного кадра.

Я хочу именно так.

image

Я попытался сделать это, настроив различные макеты для панели, но не могу заставить его работать. В приведенном ниже коде это нормально, ничего ничего для панели. Если я добавляю компоненты на панель, она ведет себя по-другому. Компоненты отображаются на панели горизонтально.

public class DialogboxExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("BoxLayout Example X_AXIS");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel panel = new JPanel();

        JLabel lblPhone = new JLabel("Name");
        lblPhone.setBounds(65, 68, 46, 14);
        frame.getContentPane().add(lblPhone);

        JTextField  textField_1 = new JTextField();
        textField_1.setBounds(136, 65, 247, 22);
        frame.getContentPane().add(textField_1);
        textField_1.setColumns(10);

        JLabel lblEmailId = new JLabel("Category");
        lblEmailId.setBounds(65, 115, 70, 14);
        frame.getContentPane().add(lblEmailId);

        JTextField textField_2 = new JTextField();
        textField_2.setBounds(136, 112, 247, 22);
        frame.getContentPane().add(textField_2);
        textField_2.setColumns(10);

        JLabel lblAddress = new JLabel("Description");
        lblAddress.setBounds(65, 162, 150, 14);
        frame.getContentPane().add(lblAddress);

        JTextArea  textArea_1 = new JTextArea();
        textArea_1.setBounds(136, 157, 300, 100);
        frame.getContentPane().add(textArea_1);

        frame.setSize(300, 300);
        frame.getContentPane().add( panel, "Center");
        frame.pack();
        frame.setVisible(true);
    }
}

Я хочу, чтобы JTextField s и JTextArea были сложены вертикально.

Может кто-нибудь, пожалуйста, помогите мне в этом?

Если я добавлю GridLayout на панель, она будет работать хорошо, но размер компонента будет одинаковым для всех 3 компонентов.

1 Ответ

1 голос
/ 24 мая 2019
  1. «Я пытался сделать это, устанавливая различные макеты для панели» Редко, когда графический интерфейс использует только один макет. В этом случае я бы, вероятно, использовал GridBagLayout (, а не a GridLayout) для надписей и текстовых полей / областей), а затем поместил бы эту панель в другой GridBagLayout, чтобы центрировать ее в JFrame. (Если я правильно понимаю требование, что я не уверен, что я делаю.)
  2. Это становится еще сложнее, если использовать JLabel для Description вместо TitledBorder.
  3. setBounds(..) будет игнорироваться при использовании любого макета, который стоит использовать. Укажите столбцы, чтобы предложить ширину для текстовых полей, а также столбцы и строки для текстовой области.
  4. DialogboxExample не очень точный, учитывая, что JFrame используется для отображения GUI. Вероятно, вместо этого следует использовать JDialog, но прилипание к кадру может привести к чему-то вроде этого:

enter image description here

...