Объект, не отображающийся внутри JFrame [дубликат]

Проблема заключается в том, что текстовый вывод не является отладчиком.

Я просто попробовал его в своей Q6600 (разогнанной 3GHz) системе, и мои цифры еще хуже. Но его легко увидеть, что они идут по более длинному выходному тексту.

Я попытался запустить его с помощью

1000 итераций => 7,8 секунд 2000 итераций => 28 , 5 секунд 3000 итераций => 70 секунд

В прошлом я делал некоторые вещи с низким уровнем TK, и я знаю, что виджет TkText сохраняет текст в структуре BTree. Добавление текста персонажа - это один из худших способов сделать, но это похоже на то, что делает IDLE. Обычным способом является улавливание большего количества данных и добавление большего фрагмента текста.

Удивительно, если вы печатаете «x \n», вывод выполняется намного быстрее. 3000 итераций за 7 секунд и 10000 за 19 сек.

Таким образом, проблема, безусловно, связана с добавлением отдельных символов в существующие строки. Программист IDLE не знал, как работает TkText.

Итак, советую добавить в текст новые символы перевода или вывести более крупные фрагменты, а не только один символ «x».

2
задан Nic Hartley 17 December 2012 в 20:00
поделиться

2 ответа

Панель содержимого файла JFrame имеет BorderLayout. Если вы поместите компонент в BL без ограничений, он окажется в CENTER. Центр может отображать только один компонент.

Для немедленного эффекта я предлагаю:

f.add(top, BorderLayout.PAGE_START);
f.add(mid);
f.add(bot, BorderLayout.PAGE_END);

Другие точки.

  1. Вынуть f.setSize(500, 500); и вызовите pack() непосредственно перед setVisible(true)
  2. . Для лучшего завершения завершения GUI измените f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); на f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  3. in.setVisible(true); За исключением самого кадра , возьмите их. Компонент автоматически становится видимым, когда он добавляется в контейнер верхнего уровня, и сам контейнер становится видимым.
  4. Измените public class EncDecExample extends JFrame на public class EncDecExample. Этот код содержит ссылку на кадр, и это правый путь.
9
ответ дан Andrew Thompson 16 August 2018 в 02:19
поделиться
  • 1
    Ах, спасибо. Мне было интересно, нужно ли мне расширять JFrame, потому что я видел это так в учебнике, которое я видел перед публикацией вопроса, но это не имело смысла. Отличный ответ, кстати. – Nic Hartley 14 December 2012 в 19:43
  • 2
    Из любопытства, есть ли какой-либо другой макет, который я могу использовать, поэтому мне не нужно добавлять бит BorderLayout.LAYOUT? – Nic Hartley 14 December 2012 в 19:45
  • 3
    Да, есть разные макеты. Конечно FlowLayout и GridLayout с правильным конструктором. Но я немного подозрительно отношусь к этому & quot; так что мне не нужно & quot; вещи. Это приведет к созданию ужасного графического интерфейса. – Andrew Thompson 14 December 2012 в 19:55
  • 4
    Я могу понять, почему вы были бы осторожны ... Это просто помогает с чтением кода (это слово?), И поэтому я могу узнать больше об этом языке. – Nic Hartley 14 December 2012 в 19:58
  • 5
    @NickHartley Это просто помогает с читабельностью кода , что не является основанием для выбора несоответствующего макета и обеспечения плохого пользовательского опыта. FlowLayout и GridLayout, IMHO, очень плохие LayoutManagers и полезны в очень немногих ситуациях. BorderLayout и GridBagLayout намного лучше. – Guillaume Polet 14 December 2012 в 20:01
setBorder(null);

просто установите нулевую границу для jpanel, которую вы используете, и используйте любой макет, который вам нравится.

0
ответ дан Mahdi Khalili 16 August 2018 в 02:19
поделиться
Другие вопросы по тегам:

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