Порядок отображения прямоугольников и их можно изменить? - PullRequest
0 голосов
/ 23 февраля 2012

Я работаю над проектом, в котором мне нужно смоделировать менеджер памяти и показать несколько снимков памяти. Я создал класс рисования с помощью примеров, которые я нашел здесь, в которых я переопределяю 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);

1 Ответ

0 голосов
/ 23 февраля 2012

Есть ли причина, по которой вы не можете этого сделать?

// Draw both Text and Block with transparency
DrawPartition part1 = new DrawPartition(Color.blue, 0, 0, 110, 100, "part1");
part1.setBounds(5, 5, 110, 100);

DrawJob job1 = new DrawJob(Color.green, 0, 0, 110, 100, "Job 1");
job1.setBounds(5, 15, 110, 100);
snapPanel.add(job1);

snapPanel.add(part1);

Более общим ответом будет добавление компонента z к каждому из ваших прямоугольников. Затем вы можете перебрать свои прямоугольники в методе paintComponent, рисуя их в z-порядке.

...