Avatar billede d0stuffz Nybegynder
26. november 2004 - 12:19 Der er 5 kommentarer og
1 løsning

Optegnelse af grafer under java.awt

Jeg har noget af et problem her.

Jeg bruger FKJ's DocJava GridBagGUI class (modificeret lidt her og der), som bruger en Container til at holde alle Component's (JLabel, Button, JTextField, osv). Det virker ganske rart.

Mit problem kommer nu. Jeg skal have lavet en graf på en frame. Jeg har ledt højt og lavt fundet forskellige mulige løsninger (java.awt.Shape, Area, Rectangle, java.awt.geom.Dimension,..). Men har stadig ikke fundet en måde at få dem ind i en Component til at gemme i Container'en.

Mit spørgsmål: Hvordan får jeg successfuldt oprettet et koordinatsæt som jeg kan putte linier/punkter ind og tegne en graf?

Jeg vil overveje at give point for gode hints eller conceptuelle beskrivelser.
Avatar billede d0stuffz Nybegynder
26. november 2004 - 13:03 #1
Overvejelsen ligger i at give Point til Carsten for http://eksperten.dk/spm/495415

Men jeg skal stadig have grafen ind i en eksisterende GUI (GridBag)
Avatar billede _carsten Nybegynder
26. november 2004 - 14:26 #2
Øhhh - du kan jo tegne på et Panel og putte det i dit layout.
Avatar billede _carsten Nybegynder
26. november 2004 - 16:08 #3
Et modificeret eksempel i et GridLayout (ref: http://eksperten.dk/spm/495415 )


import java.awt.*;
import java.awt.geom.*;

public class DrawGraf extends java.awt.Frame {
   
    public DrawGraf() {
        initComponents();
       
        setSize(800,450);
    }
   
    private void initComponents() {
        setLayout(new GridLayout(1,2));

        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });
       
        drawArea = new DrawArea(Color.YELLOW);
        add(drawArea);
        drawArea2 = new DrawArea(Color.ORANGE);
        add(drawArea2);
       
        pack();
    }

    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }

    public static void main(String args[]) {
        new DrawGraf().show();
    }
   
    private javax.swing.JPanel buttonPanel;
    private DrawArea drawArea, drawArea2;
   
   

    // Her extender jeg class Canvas, kunne ligeså godt være class Panel
    class DrawArea extends java.awt.Canvas{
        public DrawArea(Color color){
            xP = new int[]{100,125,150,200,250,280};
            yP = new int[]{110,130,180,220,250,275};
            xdP = new double[xP.length];
            ydP = new double[xP.length];
           
            for(int i = 0; i < xP.length; i++){
                xdP[i] = (double)xP[i] + 10.25;
                ydP[i] = (double)yP[i] + 10.25;
            }
           
            this.setBackground(color);
        }
       
        public void paint(Graphics g){
            g.drawString("Y", 47, 45);
            g.drawLine(50, 50, 50, 350); // line Y
            g.drawString("X", 355, 354);
            g.drawLine(50, 350, 350,350); // line X
           
            for(int i = 50; i < 350; i += 50){
                g.drawLine(47, i , 53, i);
                g.drawLine(50+i, 353 ,50+ i, 347);
            }
           
            Graphics2D g2 = (Graphics2D)g;
            g2.setColor(Color.RED);
           
            // Den lidt simple, med int
            g2.drawPolyline(xP, yP, xP.length);
           
            // Den lidt kringlede, med double
            Line2D.Double d2 = new Line2D.Double();
            g2.setColor(Color.GREEN);
            for(int i = 0; i < xP.length - 1; i++){
                d2.setLine(xdP[i], ydP[i], xdP[i + 1],ydP[i + 1]);
                g2.draw(d2);
            }

        }
       
        private int[] xP, yP;
        private double[] xdP, ydP;
    }
}
Avatar billede regurger Nybegynder
27. november 2004 - 19:23 #4
Alt efter dit behov for grafens udseende / hvor & hvordan dit program skal bruges kan du jo overveje at benytte JFreeChart til selve graf-tegningen. så slipper du for selv at skulle implementere den helt basale tegning af koordinatsystem osv. JFreeChart er ganske let at bruge og ligger frit til download her (udgivet under LGPL):
http://www.jfree.org/jfreechart/index.html

Hvis du bruger det skal du bare kunne vise et java.awt.Image i din app - det skulle nok kunne lade sig gøre :-).
Avatar billede d0stuffz Nybegynder
29. november 2004 - 14:34 #5
Carsten: jeg har ikke implementeret det endnu, men jeg kan se tråden i det og hvordan at gøre det "dynamisk" fra uge til uge.

// Wrapper class - concept
Koordinater koords = new Koordinater(new int[], new int[])
// GridBagGUI.add() metode
gbc.add(new DrawArea(Color.GREEN , koords))

Samt en smule tilretning.

regurger: desværre. Jeg vil gerne vide hvordan jeg "gør" det og alt-på-et-sølvfad er ikke lige mig.
Avatar billede _carsten Nybegynder
29. november 2004 - 15:25 #6
OK - tillader mig at lægge et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester