Создание GUI в правильном окне - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь создать графический интерфейс с 4 полями.

  1. URL
  2. имя пользователя
  3. пароль
  4. 1010 * Заявление *

В самый первый раз поля должны быть пустыми. Позже все поля рядом с полем пароля должны содержать информацию с последнего раза.

Проблемы:

  1. Окно графического интерфейса не должно иметь стандартный размер

    Чего бы я хотел достичь:

    • Когда окно открывается, оно должно динамически приспосабливаться к размеру экрана ноутбука, например центр, 20% экрана
  2. Четвертое поле (оператор) может быть очень длинным, и окно графического интерфейса автоматически становится слишком длинным.

    Чего бы я хотел достичь:

    • Для четвертого поля строка должна быть разбита на несколько строк. Если разбить поле до трех строк, а не продолжать разбивать его на четвертую строку, можно использовать полосу прокрутки.

До сих пор я нашел несколько объектов, которые могли бы помочь.

  • JOptionPane
  • JPanel
  • JTextArea для четвертого длинного поля

    Для JTextArea есть также

    • JScrollPane
    • .setLineWrap (true) для разбиения строк
    • .setWrapStyleWord (true) для разбиения строк после слова

Пример моего кода:

JPanel pane = new JPanel();
// adding GridLayout
pane.setLayout(new GridLayout(4,2));
// fields are filled just as an example
// later they will get substituted by variables
JTextField url = new JTextField ("https:testin.com");
JTextField username = new JTextField ("theDude");
JTextArea statement = new JTextArea("This statement can becomme very very very long :)");
statement.setLineWrap(true);
statement.setWrapStyleWord(true);
JScrollPane scrollPane = new JScrollPane(statement);
pane.add(scrollPane);
// add infos to pane
pane.add(new JLabel ("Enter url: "));
pane.add(url);
pane.add(new JLabel ("Enter username: "));
pane.add(username);
pane.add(new JLabel ("Enter password: "));
pane.add(new JPasswordField());
pane.add(new JLabel ("Enter statement: "));
pane.add(statement);
//write it to a OK_CANCEL JOptionPane
int option = JOptionPane.showConfirmDialog(null,pane, "Fill all the fields",JOptionPane.OK_CANCEL_OPTION,JOptionPane.INFORMATION_MESSAGE);

enter image description here

1 Ответ

2 голосов
/ 10 марта 2019

Вы можете установить высоту (количество видимых линий) JTextArea, используя setRows(). Попробуйте приведенный ниже пример. Я начал с вашего кода и сделал несколько изменений.

import javax.swing.*;
import java.awt.*;

public class ThreeLinesTextArea
{
  public static void main(String[] args)
  {
    JPanel pane = new JPanel();
    // Change to GridBagLayout
    pane.setLayout(new GridBagLayout());
    JTextField url = new JTextField("https:testin.com");
    JTextField username = new JTextField("theDude");

    JTextArea statement = new JTextArea("This statement can becomme very very very long :)");
    statement.setLineWrap(true);
    statement.setWrapStyleWord(true);
    // Use setRows() to make text area have multiple lines
    statement.setRows(3);
    JScrollPane scrollPane = new JScrollPane(statement);

    //This line is removed. scrollPane is added at the end.
    //pane.add(scrollPane);

    pane.add(new JLabel("Enter url: "),
        new GridBagConstraints(0, 0, 1, 1, 1.0, 1.0, GridBagConstraints.WEST,
            GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 0, 0));
    pane.add(url,
        new GridBagConstraints(1, 0, 1, 1, 1.0, 1.0, GridBagConstraints.WEST,
            GridBagConstraints.HORIZONTAL, new Insets(2, 2, 2, 2), 0, 0));
    pane.add(new JLabel("Enter username: "),
        new GridBagConstraints(0, 1, 1, 1, 1.0, 1.0, GridBagConstraints.WEST,
            GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 0, 0));
    pane.add(username,
        new GridBagConstraints(1, 1, 1, 1, 1.0, 1.0, GridBagConstraints.WEST,
            GridBagConstraints.HORIZONTAL, new Insets(2, 2, 2, 2), 0, 0));
    pane.add(new JLabel("Enter password: "),
        new GridBagConstraints(0, 2, 1, 1, 1.0, 1.0, GridBagConstraints.WEST,
            GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 0, 0));
    pane.add(new JPasswordField(15),
        new GridBagConstraints(1, 2, 1, 1, 1.0, 1.0, GridBagConstraints.WEST,
            GridBagConstraints.HORIZONTAL, new Insets(2, 2, 2, 2), 0, 0));
    pane.add(new JLabel("Enter statement: "),
        new GridBagConstraints(0, 3, 1, 1, 1.0, 1.0, GridBagConstraints.WEST,
            GridBagConstraints.NONE, new Insets(2, 2, 2, 2), 0, 0));
    pane.add(scrollPane,
        new GridBagConstraints(1, 3, 1, 1, 1.0, 1.0, GridBagConstraints.WEST,
            GridBagConstraints.HORIZONTAL, new Insets(2, 2, 2, 2), 0, 0));

    int option = JOptionPane.showConfirmDialog(null, pane, "Fill all the fields",
        JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE);
  }
}

Выход:

enter image description here

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