Я работаю над проектом, в котором мне нужно смоделировать менеджер памяти и показать несколько снимков памяти. Я создал класс рисования с помощью примеров, которые я нашел здесь, в которых я переопределяю paintComponet (). Все хорошо рисует.
Я хотел бы иметь возможность нарисовать прямоугольник для представления раздела памяти, а затем наложить еще один прямоугольник поверх, чтобы представить входящее задание (т.е. Job1 находится в этом разделе3). Кажется, что сначала я добавляю раздел (который всегда будет иметь место), а затем, когда я добавляю задание, он будет находиться за блоком раздела. Есть ли другой способ, кроме рисования задания, сместить его после создания задания?
Вот переопределение краски
@Override public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
// set up rendering to allow anti-aliasing
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// create the rectangle to represent the memory partition block
// x = address position h = amount of memory (y & w are predefined for the display block)
Rectangle2D rect = new Rectangle2D.Double(x, y, w, h); // create the rectangle
g2d.setPaint(partColor); // set it's color
g2d.fill(rect); // fill it in
// create the transparency for the text
Composite comp = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .4f);
g2d.setComposite(comp);
// draw the text with color, type and size and center the text in the block created above
g2d.setPaint(Color.black);
g2d.setFont(new Font("Tahoma", Font.PLAIN, 12));
g2d.drawString(text, (int)((w / 2) - (text.length()/2)), (int)h/2);
}
Вызов для рисования находится в моем классе окна (это поместит раздел перед заданием), но мне нужно изменить порядок, не меняя порядок вызовов.
// Draw both Text and Block with transparency
DrawPartition part1 = new DrawPartition(Color.blue, 0, 0, 110, 100, "part1");
part1.setBounds(5, 5, 110, 100);
snapPanel.add(part1);
DrawJob job1 = new DrawJob(Color.green, 0, 0, 110, 100, "Job 1");
job1.setBounds(5, 15, 110, 100);
snapPanel.add(job1);