Я использую команду textField.setBounds (290, 80, 135, 40);разместить его там, где я хочу, но это не работает.Почему это могло произойти?
Swing был разработан для использования с менеджерами компоновки.Диспетчером макетов по умолчанию для JPanel является FlowLayout.FlowLayout будет игнорировать оператор setBounds (...) и устанавливать размер / расположение текстового поля на основе правил FlowLayout.
Поэтому не пытайтесь использовать нулевой макет и неиспользуйте setBounds ().Вместо этого позвольте менеджеру раскладки выполнять свою работу.
Кроме того, вы должны добавлять компоненты во фрейм, ДО того, как вы сделаете фрейм видимым.
Я бы предположил, что ваш код должен выглядеть примерно так:
JTextField textField = new JTextField(10);
JPanel top = new JPanel();
top.add( textField );
Board board = new Board();
add(top, BorderLayout.PAGE_START);
add(board, BorderLayout.CENTER);
setResizable( false );
pack();
setVisible( true );
Класс Board должен переопределить метод Board getPreferredSize()
, чтобы вернуть желаемый размер, чтобы метод pack () работал правильно.
Менеджер компоновки по умолчанию для JFrame:BorderLayout
.Итак, теперь верхняя часть фрейма будет содержать текстовое поле по центру, а основная часть фрейма будет содержать ваш класс Board.Прочтите раздел из учебника Swing по Как использовать BorderLayout , чтобы понять, как работает приведенный выше код.
Кроме того, MouseListener должен быть добавлен в Board, а не в JFrame.