GaneshRfromSpace Ответов: 0

Как избежать дрожания, возникающего при добавлении компонентов пользовательского интерфейса в переопределенный метод 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

Последовательность была неправильной. У меня был кейлистенер для фигур в моем конструкторе. Я добавил переключатели в конце конструктора, и это сработало.

0 Ответов