Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с графическим контекстом. Странное поведение граф. контекста. 
:(
    Опции темы
egy2010
Дата 26.11.2009, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 26.11.2009

Репутация: нет
Всего: нет



Hi2All! Как то странно ведет себя графический контекст, drawNodes(g2) рисуется, drawNodeLines(g2, key, x, y) тоже рисуется но если внутри  drawNodeLines(g2, key, x, y); стоит if () то на экране видно, что линии нарисовались и затем быстро исчезли, в то время как фигуры из drawNodes(g2); видны нормально.
В общем если расскоментировать if (!drawed.contains(key3 + key)) { линии рисуются, но они нужны не все, поэтому необходим этот if, а если он есть, то есть и проблема которую описал выше.


Код

//Рисование графа из карты TreeMap]
package graph;

import java.awt.*;
import java.awt.dnd.DropTargetDragEvent;
import java.awt.dnd.DropTargetDropEvent;
import java.awt.dnd.DropTargetEvent;
import java.awt.dnd.DropTargetListener;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.Vector;
import javax.swing.*;

public class LineGraph extends JFrame implements DropTargetListener {
    LinePanel linePanel = new LinePanel();
    static Vector<Integer> grcoord = new Vector<Integer>();
    static Vector<String> nodes = new Vector<String>();
    static Vector<Vector> grinfo = new Vector<Vector>();
    static SortedMap<String, Vector<Vector>> graph = new TreeMap<String, Vector<Vector>>();
    static LinkedList<String> drawed = new LinkedList<String>();
    static int rN = 10;

    public LineGraph() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        initContentPane();
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    private void initContentPane() {
        getContentPane().add(linePanel);
    }

    class LinePanel extends JPanel {
        LinePanel() {
            super();
        }

        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D) g;
            g2.setColor(Color.RED);
            drawNodes(g2);
            
            Integer refInt = new Integer(123);
            Integer x = refInt.valueOf("1");
            Integer y = refInt.valueOf("1");

            
            for (Iterator it = graph.keySet().iterator(); it.hasNext();) {
                String key = it.next().toString();

                x = refInt.valueOf(graph.get(key).get(0).get(0).toString());
                y = refInt.valueOf(graph.get(key).get(0).get(1).toString());
                g2.setColor(Color.blue);
                
                drawNodeLines(g2, key, x, y);
                
                

            }
        }

        public void drawNodes(Graphics2D g) {
            Integer refInt = new Integer(123);
            Integer x = refInt.valueOf("1");
            Integer y = refInt.valueOf("1");
            int i = 0;
            for (Iterator it = graph.keySet().iterator(); it.hasNext();) {
                i++;
                String key = it.next().toString();
                x = refInt.valueOf(graph.get(key).get(0).get(0).toString());
                y = refInt.valueOf(graph.get(key).get(0).get(1).toString());
                g.drawOval(x, y, 22, 22);
                g.setBackground(Color.blue);
                g.drawString(key, x, y);

            }

        }

        public void drawNodeLines(Graphics2D g, String key, Integer x, Integer y) {
            Integer refInt = new Integer(123);
            Integer x1 = refInt.valueOf("1");
            Integer y1 = refInt.valueOf("1");
            String key2 = "";
            String key3 = "";
            Graphics g3 = null;
            key2 = graph.get(key).get(1).get(0).toString();

            for (int i = 0; i < graph.get(key).get(1).size(); i++) {
                key3 = graph.get(key).get(1).get(i).toString();
                drawed.add(key + key3);

                x1 = refInt.valueOf(graph.get(key3).get(0).get(0).toString());
                y1 = refInt.valueOf(graph.get(key3).get(0).get(1).toString());

// trouble        if (!drawed.contains(key3 + key)) {
                    rN += 10;
                    g.drawLine(x + 11, y + 11, x + rN, y + 11);
                    g.drawLine(x1 + rN, y1 + 11, x + rN, y + 11);
                    g.drawLine(x1 + 11, y1 + 11, x1 + rN, y1 + 11);
                }
//            }
        }

        public Dimension getPreferredSize() {
            return new Dimension(400, 350);
        }
    }

    public void dragEnter(DropTargetDragEvent dtde) {
        System.out.println("Drag Enter");
    }

    public void dragExit(DropTargetEvent dte) {
        System.out.println("Drag Exit");
        // tb.getSelectedRow();
    }

    public void dragOver(DropTargetDragEvent dtde) {
        System.out.println("Drag Over");
    }

    public void dropActionChanged(DropTargetDragEvent dtde) {
        System.out.println("Drop Action Changed");
    }

    public void drop(DropTargetDropEvent dtde) {
    }

    public static void main(String[] args) {

        // 1st node
        grcoord = new Vector<Integer>();
        grcoord.add(11);
        grcoord.add(11);
        nodes = new Vector<String>();
        nodes.add("c");
        grinfo = new Vector<Vector>();
        grinfo.add(grcoord);
        grinfo.add(nodes);
        graph.put("a", grinfo);

        // 2nd node
        grcoord = new Vector<Integer>();
        grcoord.add(11);
        grcoord.add(70);
        nodes = new Vector<String>();
        nodes.add("d");
        grinfo = new Vector<Vector>();
        grinfo.add(grcoord);
        grinfo.add(nodes);
        graph.put("b", grinfo);

        // 3th node
        grcoord = new Vector<Integer>();
        grcoord.add(11);
        grcoord.add(120);
        nodes = new Vector<String>();
        nodes.add("a");
        grinfo = new Vector<Vector>();
        grinfo.add(grcoord);
        grinfo.add(nodes);
        graph.put("c", grinfo);

        // 4th node
        grcoord = new Vector<Integer>();
        grcoord.add(11);
        grcoord.add(180);
        nodes = new Vector<String>();
        nodes.add("b");
        grinfo = new Vector<Vector>();
        grinfo.add(grcoord);
        grinfo.add(nodes);
        graph.put("d", grinfo);

        System.out.println(graph);
        String str = "1";
        Integer refInt = new Integer(123);
        Integer x = refInt.valueOf("1");
        Integer y = refInt.valueOf("1");
        System.out.println(graph.get("a").get(0).get(0).toString());
        for (Iterator it = graph.keySet().iterator(); it.hasNext();) {
            String key = it.next().toString();
            x = refInt.valueOf(graph.get(key).get(0).get(0).toString());
            System.out.println("x = " + x);
            y = refInt.valueOf(graph.get(key).get(0).get(1).toString());
            System.out.println("y = " + y);
        }
        new LineGraph();
    }
}


PM MAIL   Вверх
jk1
Дата 13.12.2009, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



Метод paintComponent() будет вызываться каждый раз при перерисовке компонента. Коллекция drawned является глобальной и нигде не очищается, следовательно, уже при второй перерисовке условие  !drawed.contains(key3 + key) удовлетворяться не будет. Это означает, что начиная со второй перерисовки исчезнут все линии, нарисованные во время первой. Помните, что метод paintComponent() не дорисовывает, а рисует заново.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0421 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.