Dynamische Grafik-Malerei-Objekt

Versuchen, herauszufinden, der beste Weg, dies zu tun (Und die Querung ohne irgendwelche Besonderheiten DO-NOTs, die ich nicht kenne).

Ich arbeite visuell anzeigen eines graph (Verschiedene Knoten, die mit Kanten verbinden) mit Kreisen und Linien zu bilden eine solche. Jeder Knoten Hinzugefügt werden, während der Laufzeit und ich kann nicht fest diese. Von dem was ich verstehe, alle Malerei getan werden muss, um in der paint(Graphics g) - Methode - und die ist nicht so hilfreich, da kann ich nicht die Parameter ändern, und es scheint dies ist nur während der anfänglichen Schöpfung?

Jetzt dachte ich darüber, dass es das aufrufen von verschiedenen anderen Methoden, die das Graphics-Objekt übergeben, und in Abhängigkeit von anderen Variablen - ich werde entscheiden, ob das ist, was ich auch nennen wollen (Da die paint () - Methode ist die einzige, die ich nennen kann).

Werde ich über das komplett falsch? Nie die Mühe gemacht mit diesem vor.

Geben Ihnen eine bessere Vorstellung von dem, was ich will, bis zum Ende mit: ich will in der Lage sein, um übergeben Sie die Koordinaten der Form, möchte ich hinzufügen, dass für den Knoten, und dann hinzufügen, was ich auf dem Diagramm so weit. Und dann gleich mit den Kanten, ich möchte in der Lage sein, um übergeben Sie die Anfang-und Endpunkt der Linie zu streichen, auf der Oberseite, was auch immer ist zu diesem Zeitpunkt bestehenden.

Nicht genau, was ich will, gerade jetzt -, aber Sie bekommen die Idee von dem, was ich zusammen geflickt so weit:

import java.awt.*;
import javax.swing.*;
public class MyCanvas extends Canvas
{
    public MyCanvas()
    {
    }
    public void paint(Graphics graphics)
    {
        //Keep this until I figured out if it's painted on load or not.
        graphics.drawLine(10, 20, 350, 380);
    }
    public static void main(String[] args)
    {
        MyCanvas canvas = new MyCanvas();
        JFrame frame = new JFrame();
        int vertexes = 0;
        //Change this next part later to be dynamic.
        vertexes = 10;
        int canvasSize = vertexes * vertexes;
        frame.setSize(canvasSize, canvasSize);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(canvas);
        frame.setVisible(true);
    }
    public void drawNode(int x, int y, Graphics g)
    {
            //Treat each location as a 10x10 block. If position 1,1 then go to (5,5) - If position 3,5 then go to (25, 45) eg: (x*10)-5, (y*10)-5 
            int xLoc = (x*10) - 5;
            int yLoc = (y*10) - 5;
            g.setColor(Color.white);
            g.fillOval(xLoc, yLoc, 8, 8);
            g.drawOval(xLoc, yLoc, 8, 8);
    }
    public void drawArc(int x, int y, int xx, int yy, Graphics g)
    {
            int xLoc = (x*10) - 5;
            int yLoc = (y*10) - 5;
            int xxLoc = (xx*10) - 5;
            int yyLoc = (yy*10) - 5;
            g.drawLine(xLoc, yLoc, xxLoc, yyLoc);
    }

}

Edit: (Antwort für Andrew)

import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
public class MyCanvas extends JPanel
{

    public MyCanvas() {

    }
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
    }

    public static void main(String[] args)
    { 
        int vertexes = 0;
        //Change this next part later to be dynamic.
        vertexes = 10;
        int canvasSize = vertexes * vertexes;

        JFrame frame = new JFrame();
        JLabel label = new JLabel();
        BufferedImage bImage = new BufferedImage(canvasSize, canvasSize, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g2d = bImage.createGraphics();
        g2d.drawLine(50, 50, 300, 300);
        ImageIcon iIcon = new ImageIcon(bImage); 
        label.setIcon(iIcon);
        frame.add(label);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        g2d = drawNode(1,1,g2d);
        label.repaint();
    }

    public static Graphics2D drawNode(int x, int y,Graphics2D g2d)
    {
            //Treat each location as a 10x10 block. If position 1,1 then go to (5,5) - If position 3,5 then go to (25, 45) eg: (x*10)-5, (y*10)-5 
            int xLoc = (x*10) - 5;
            int yLoc = (y*10) - 5;
            g2d.setColor(Color.white);
            g2d.fillOval(xLoc, yLoc, 8, 8);
            g2d.drawOval(xLoc, yLoc, 8, 8);
            return g2d;
    }
    public static void drawArc(int x, int y, int xx, int yy)
    {
            int xLoc = (x*10) - 5;
            int yLoc = (y*10) - 5;
            int xxLoc = (xx*10) - 5;
            int yyLoc = (yy*10) - 5;
           //g.drawLine(xLoc, yLoc, xxLoc, yyLoc);
    }

}
  • Don ' T mix Swing (z.B. JFrame) und AWT (z.B. Canvas) Komponenten. Statt der Canvas verwenden Sie eine JPanel & override paintComponent(Graphics).
InformationsquelleAutor TJ Biddle | 2012-05-17
Schreibe einen Kommentar