Java Swing: очистка пользовательской живописи от JPanel, наложенного на другие JPanels в JLayeredPane - PullRequest
2 голосов
/ 14 апреля 2011

У меня есть JLayeredPane, содержащая три JPanels, два из которых перекрываются, и я рисую фигуры.Одному из двух перекрывающихся JPanel необходимо очистить каждую нарисованную фигуру, не затрагивая при этом фигуры, нарисованные для JPanel, исчезают с экрана.В настоящее время я использую что-то вроде этого:

    Graphics g = pane2.getGraphics(); 
    g.clearRect (0, 0, 1000, 1000);

Но это не только очищает все нарисованное в pane2, но также и в pane1, которая находится под ним.Итак, мой вопрос: есть ли способ очистить все нарисованное для одной JPanel, не затрагивая ничего нарисованного для JPanel под ним?

Ответы [ 3 ]

3 голосов
/ 14 апреля 2011

Убедитесь, что ваши панели непрозрачны.Я бы подумал, что вам нужен код вроде:

Graphics g = pane2.getGraphics();      
g.clearRect (0, 0, 1000, 1000); 
pane2.repaint(0, 0, 1000, 1000);

Или вы можете использовать следующее для принудительной перерисовки всех панелей:

layeredPane.repaint();
2 голосов
/ 14 апреля 2011

Я думаю, что вы должны использовать клип для установки областей, которые не должны быть заменены.В панели 2 определите, какая область не должна быть повреждена, и создайте прямоугольные прямоугольники.Затем создайте область клипа.Прямоугольник с вычитаемой площадью.См. Класс области, чтобы вычесть форму.

2 голосов
/ 14 апреля 2011

Я думаю, вы можете очистить его таким образом, а затем просто покрасить его стандартным способом.Что-то вроде:

Graphics g = pane2.getGraphics(); 
g.clearRect (0, 0, 1000, 1000);
super.paintComponent(g);

Вам также может понадобиться перекрасить нижнюю JPanel.

Если вы не можете перекрасить нижнюю JPanel - если, например, у вассписок фигур в любом месте - тогда я подозреваю, что это может быть невозможно восстановить на дне JPanel.

...