Автоматическое создание новых JPanels на JFrame - PullRequest
0 голосов
/ 30 января 2019

В настоящее время я работаю над блогом / форумным порталом в качестве школьного проекта для университета.

Я работаю с Swing в качестве графического интерфейса.

У меня вопрос, возможно лиавтоматически сгенерируйте уже готовый класс JPanel на JFrame, чтобы он выглядел как вопросы на главной странице stackoverflow.

Таким образом, в основном, когда сообщение создается, оно попадает в базу данных ->Я использую метод получения, чтобы заполнить информацию на панели, а затем он автоматически генерирует себя на фрейм, так что мне не нужно создавать несколько фиксированных панелей на фрейме.

Так что если нет постов,страница будет пустой.Когда создается новый пост, он отображается как первый пост, следующий за ним и т. Д. И т. Д.

Возможно ли это сделать?

1 Ответ

0 голосов
/ 30 января 2019

Возможно ли это сделать?

Конечно, это возможно.

Сначала , вам необходимо расширить JPanelсодержать компоненты, которые вам нужны.Этот подкласс JPanel будет содержать все метки, кнопки и т. Д., Необходимые для представления данных желаемым способом.Пример:

public class CommentPanel extends JPanel {
    private final JLabel usernameLabel = new JLabel();
    private final JLabel timestampLabel = new JLabel();
    // etc...
}

Далее , этот новый класс должен иметь способ устанавливать состояния компонентов, используя объект вашей модели. Этот шаг не является обязательным , но он даст много удобства при этом.Пример:

public void setComment(Comment comment) {
    // appearance
    usernameLabel.setText(comment.getUser().getName());
    timestampLabel.setText(comment.getDate());
    commentText.setText(comment.getContent());

    // button behavior
    editButton.setActionListener(e -> editComment(comment));
    deleteButton.setActionListener(e -> deleteComment(comment));
}

Далее - вам нужен контейнер в родительском контейнере, например, JFrame для хранения потенциальных сгенерированных пользовательских панелей.Для этого идеально подойдет панель с контролируемым LayoutManager.

public class MainFrame extends JFrame {
    private final JPanel commentHolder = new JPanel();
    // etc...
    // add `commentHolder` to this frame
}

Наконец , вам нужно создать пользовательские панели и установить данные.Если вы создали метод, заключающий в себе логику установки данных (необязательный шаг), это будет однострочник.

List<Comment> comments = fetchAllFromDb();
for (Comment comment : comments) {
    // instantiate the custom panel
    CommentPanel commentPanel = new CommentPanel();

    // set the panel states and behavior
    commentPanel.setComment(comment);

    // add the created panel to the parent using the holder
    commentHolder.add(commentPanel);
}
...