У меня есть установка, в которой есть несколько JInternalFrames в основном JFrame. Что я хочу сделать, так это нарисовать некоторые вещи на основном JFrame, но под JInternalFrame. Если я настрою код как
public void paint(Graphics graphics){
try{
Graphics2D g = (Graphics2D) s.getDrawGraphics();
super.paint(g);
super.paintComponents(g);
//Insert Paint Code Here
s.show();
super.repaint();
}catch(Exception ex){}
}
окрашенное содержимое отображается над JInternalFrames (которые являются компонентами JDesktopFrame). Если я попытаюсь поместить код рисования перед super.paint(g)
или super.paintComponents(g)
, нарисованное содержимое вообще не появится. Как сделать так, чтобы отображалось нарисованное содержимое, но под внутренними рамками?
Примечание. s
— это BufferStrategy, и этот класс наследуется от абстрактного класса JFrame.
paint
, дочерние компоненты могут быть прорисованы независимо от их родителей, которые могут делать всевозможные странные вещи. Не вызывайтеshow
илиrepaint
, на самом деле, не делайте ничего, что может вызвать перерисовку.paint
должен рисовать текущее состояние, не более того. Звонитьsuper.paintComponents
бессмысленно,paint
уже сделал это.s.getDrawGraphics
также пугает меня до чертиков, так как вы, кажется, игнорируете систему, поставляемуюGraphics
, поэтому я понятия не имею, куда вы на самом деле рисуете. - person MadProgrammer   schedule 02.11.2015super.paintComponents(g);
Почему этот код включен? ЭТО, кажется, прервало цепочку покраски .. - person Andrew Thompson   schedule 02.11.2015JPanel
(илиJDesktopPane
в вашем случае), и переопределить егоpaintComponent
и выполнить там свою пользовательскую отрисовку, в основном игнорируя все остальное, что может быть добавлено к нему, таким образом, что бы вы ни рисовали. будет гарантированно окрашен нижеJInternalFrame
s - person MadProgrammer   schedule 02.11.2015