Как я динамично добавляю Панели к другим панелям во времени выполнения в Java?

Сетевые запросы являются асинхронными для предотвращения блокировки пользовательского интерфейса. Fetch API , который Apollo использует под капотом, использует Promises вместо более традиционных обратных вызовов для обработки асинхронных запросов ресурсов по сети, поэтому API-интерфейс Apollo также основан на Promises. Нет доступных методов, которые позволили бы вам синхронно извлекать запрос GraphQL - вам просто нужно правильно структурировать свой код для обработки Promise после его разрешения.

В следующих примерах предполагается, что вы правильно настроили экземпляр клиента. Использование then:

function doSomething () {
  client.query({ query: SOME_QUERY })
    .then(({ data }) => {
      // Use the returned data however you like
    })
    .catch(error => {
      // Handle error
    })
}

Использование async / await:

async function doSomething () {
  try {
    const { data } = await client.query({ query: SOME_QUERY })
  } catch (error) {
    // Handle error
  }
}

Если вы не знакомы с Promises, было бы полезно ознакомиться с соответствующей документацией [ 114] и ознакомьтесь с некоторыми учебниками .

10
задан Lahiru Ashan 25 November 2016 в 03:40
поделиться

4 ответа

Я понял это. Комментарии в соответствии с принятым ответом здесь объясняют это: Динамично добавленный JTable, не отображающийся

В основном я просто добавил следующее перед mainPanel.add ()

mainPanel.setLayout(new java.awt.BorderLayout());
17
ответ дан 3 December 2019 в 18:37
поделиться

Swing/AWT компоненты обычно должны иметь расположение, прежде чем Вы добавите вещи к ним - иначе UI не будет знать, куда поместить субкомпоненты.

BFreeman предложил BorderLayout который является одним из самых легких для использования и позволяет Вам 'склеивать' вещи к вершине, нижней части, покинутой, право или центр родителя.

Существуют другие такой как FlowLayout который похож на a textarea - это добавляет компоненты слева направо наверху родителя и переносится на новую строку, когда это добирается в конец.

GridBagLayout который всегда был известен за то, что был невозможен выяснить, но действительно дает Вам почти весь контроль, Вам было бы нужно. Немного как те HTML таблицы, которые мы раньше видели с причудливыми комбинациями rowspan, colspan, ширины и атрибутов высоты - который никогда, казалось, не смотрел вполне, как Вы хотели их.

5
ответ дан 3 December 2019 в 18:37
поделиться

Как со всем кодом колебания, не забывайте называть любое обновление gui в потоке отправки события. Посмотрите это для того, почему необходимо сделать обновления как это

// Do long running calculations and other stuff outside the event dispatch thread
while (! finished )
  calculate();
SwingUtilities.invokeLater(new Runnable(){
  public void run() {
    // update gui here
  }
}
0
ответ дан 3 December 2019 в 18:37
поделиться

Попробовать mainPanel.invalidate() и затем при необходимости, mainPanel.validate(). Также могло бы стоить проверить, что Вы делаете, это все в конечном счете диспетчеризирует поток, иначе Ваши результаты будут пятнистыми и (обычно) недетерминированными.

-1
ответ дан 3 December 2019 в 18:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: