В вашем коде есть два предупреждения:
вы используете следующее выражение для добавления компонентов
window.add(txt);
//....
window.add(but[i]);
оба вызова являются ярлыками для
window.getContentPane().add
и панель содержимого JFrame по умолчанию имеет BorderLayout.И по умолчанию этот макет будет добавлять компоненты в центральной области, если при добавлении не указана другая область / ограничение.Таким образом, вы просто размещаете компоненты один над другим, остается только последний.
Вы должны "вырезать" (плохой перевод, нарезать?) Больше вашего GUI, добавив JLabel в центре и добавив еще одну JPanel на юг, а внутри него используйте макет потока и добавьте свои кнопки.
Вот хорошее начало для использования упомянутой схемы, которая очень стандартна.
Также вы используете JLabel в качестве контейнера.Почти все компоненты Swing наследуются от java.awt.Container
, это используется Swing для предоставления составных компонентов, но на самом деле, вы никогда не должны использовать их в качестве контейнера, то есть не помещать в них другие компоненты или давать им компоновку.Вы делаете это, задавая расположение в строке
txt.setLayout(new GridLayout(1, 1));
, поэтому удалите эту строку.Используйте компоненты Swing в качестве компонентов, а JPanel (или JTabbedPane и т. Д.) В качестве контейнеров.
С уважением, Стефан, никогда не задавайте значения жестко, используйте константы.Нет 9, но BUTTON_COUNT = 9 статический член.Вы могли бы рассмотреть вопрос о покупке книги Java.Раньше я рекомендовал Deitel и Deitel своим ученикам.