Как избежать дрожания, возникающего при добавлении компонентов пользовательского интерфейса в переопределенный метод paint () класса frame?
Я написал код, который создает графические фигуры и отображает на экране шрифты/строки, написанные на нем.
Для этого я расширил класс Frame, а его метод paint() был переопределен, и графические фигуры были созданы и визуализированы на экране.
Теперь я хотел отобразить другую строку, когда выбрана другая языковая опция.
Я использую DOM parser для анализа различных языковых текстов (xml-файлов, имеющих разные языковые значения тегов), и он также прекрасно отображается на экране.
Я вручную писал в коде, чтобы выбрать этот языковой файл для разбора и визуализации его на экране
Я хотел использовать переключатели, чтобы выбрать, какой языковой файл анализировать, но когда я пытаюсь добавить эти переключатели на экран, кнопки текут, и он дрожит, мерцает.
существующий код:
Class Apple extends Frame { private Shape A = new RoundRectangle2D.Double(20,30,100,150,10,10); private Shape B = new RoundRectangle2D.Double(20,200,100,150,10,10); Apple() { setTitle("Fruits"); setBackground(Color.BLACK); setSize(700,700); setVisible(true); } @Override public void paint(Graphics graphics) { super.paint(graphics); //Code for drawing Graphical Shapes.. //Code for setting font into the graphical shapes.. } }
Этот код работает отлично,
Но я хочу вставить несколько переключателей на этот экран для выбора языка (для шрифтов, которые отображаются в фигурах).
Поэтому я сделал это
Class Apple extends Frame { private Shape A = new RoundRectangle2D.Double(20,30,100,150,10,10); private Shape B = new RoundRectangle2D.Double(20,200,100,150,10,10); CheckboxGroup languageSelector = new CheckboxGroup(); Checkbox selectEnglish = new Checkbox("English", languageSelector,true); Checkbox selectHindi = new Checkbox("Hindi", languageSelector, false); Apple() { selectEnglish.setBounds(300,100,70,50); selectHindi.setBounds(350,100,70,50); setTitle("Fruits"); setBackground(Color.BLACK); setSize(700,700); setVisible(true); } @Override public void paint(Graphics graphics) { super.paint(graphics); //Code for drawing Graphical Shapes.. //Code for setting font into the graphical shapes.. add(selectEnglish) add(selectHindi) } }
Что я уже пробовал:
Если я добавлю переключатели в рамку непосредственно в конструкторе, он проигнорирует переопределенный метод paint и будет отображать только переключатели на экране, а не фигуры..
Поэтому я подумал, что могу добавить переключатели в рамку с помощью самого переопределенного метода рисования, но кнопки постоянно мерцают по экрану.
Richard MacCutchan
Вы должны добавить элементы управления в JFrame в начале приложения или в конструкторе, а не в методе paint.
GaneshRfromSpace
Последовательность была неправильной. У меня был кейлистенер для фигур в моем конструкторе. Я добавил переключатели в конце конструктора, и это сработало.