JTextField txt = new JTextField();
Когда вы создаете JTextField, вы должны использовать код, подобный следующему:
JTextField txt = new JTextField(10);
Теперь текстовое поле может рассчитывать свой собственный предпочтительный размер.
//txt.setBounds(10, 10, 300, 50);
Не использоватьsetBounds (), чтобы дать компоненту размер.Опять же, каждый компонент Swing отвечает за определение своего предпочтительного размера.Затем менеджер макета установит размер / расположение компонента на панели.
//public void paint(Graphics g) {
public void paintComponent(Graphics g)
{
super.paintComponent(g);
// add custom painting here
}
Не переопределяет paint ().Выборочная окраска выполняется путем переопределения метода paintComponent ().И первое утверждение в методе должно быть super.paintComopnent (g)
//g2D.setColor(Color.BLACK);
//g2D.fillRect(0, 0, this.getWidth(), this.getHeight());
Не рисовать фон панели.Это работа панели, и поэтому вам нужно использовать super.paintComponent (), чтобы убедиться, что фон закрашен.
Затем в конструкторе вашего класса JPanel вы просто используете setBackground( Color.BLACK )
//txt.repaint();
Никогда не вызывайте repaint () для любого компонента в методе рисования.
Прочтите раздел из учебного пособия по Swing по Custom Painting , где приведены рабочие примеры для начала работы.Используйте демо-код в качестве отправной точки для вашей программы.Затем вы просто добавляете JTextField на панель, так что это будет одна строка кода, необходимая для отображения текстового поля.