Avatar billede bamse2000 Nybegynder
16. august 2003 - 20:14 Der er 11 kommentarer og
1 løsning

Grafik i java

Hej alle!

Håber at I kan hjælpe med følgende:

Jeg skal bruge en klasse som opretter noget grafik-værk i f.eks. et frame. Det skal have metode som let kan opdatere grafikken i framet!


håber at I kan diske op men en lille klasse!

Tak!

>>Bamse
Avatar billede nmh Nybegynder
16. august 2003 - 20:49 #1
Jeg skrev for nogle år siden en java-grafikpakke.Den var til brug på hjemmesider, og de forskellige funktioner blev aktiveret fra VBscript eller java script:
tegning af linier mellem to punkter, rektangler, polygonfigurer i forskellige farver, etc.
Ville det være af interesse?
Avatar billede bamse2000 Nybegynder
16. august 2003 - 21:20 #2
Ja - måske, men jeg skal ikke bruge det til html, bare dos-prompt i windows!
Avatar billede nmh Nybegynder
16. august 2003 - 21:37 #3
her kan du se nogle del af grafik-pakken, men den bruger en
java.applet.Applet, så du kan nok ikke bruge det. Men her er en lille del, der viser hvad det går ud på:

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class JavaGrafik extends Applet
  implements MouseListener,MouseMotionListener {
  String Sts="Antal ubrugte punkter: ";
  int mouseX[];
  int mouseY[];
  int pp; int Max=50;
  int Mx=0, My=0;
  Image offIm;
  Graphics offGraph;

public void init(){
  mouseX= new int[Max];
  mouseY= new int[Max];
  for (int i=0;i<Max;i++){mouseX[i]=0;mouseY[i]=0;}
  pp=0;
  addMouseListener( this );
  addMouseMotionListener( this );
  offIm=createImage(getSize().width,getSize().height);
  offGraph=offIm.getGraphics();   
  offGraph.drawRect(0,0,getSize().width-1,getSize().height-1);
  repaint();
}

  public void wipeInit(){       
    pp=0;     
    offIm=createImage(getSize().width,getSize().height);
    offGraph=offIm.getGraphics();   
    offGraph.drawRect(0,0,getSize().width-1,getSize().height-1);
    repaint();
  }
  //Farvevalg
  public void newColor(int r, int g, int b){
    offGraph.setColor(new Color(r,g,b));
  }
//En tekststreng udskrives på stedet (x,y) 
public void drawString(String str, int x, int y){
    offGraph.drawString(str,x,y);
    repaint();
  }

  //Et rektangel tegnes. Øverste venstre hjørne (x1,y1), bredde w og højde h
  public void drawRect(int x1, int y1, int w, int h){
    offGraph.drawRect(x1,y1,w,h);
    repaint();
  }
Avatar billede bamse2000 Nybegynder
16. august 2003 - 22:01 #4
ja desværre!
Avatar billede flodfarmer Nybegynder
17. august 2003 - 01:55 #5
Du kan let flytte en Applet til en Frame, selv det ikke er rigtig pæn kode. Du skal bare inkludere en main metode som ->
public static void main(String[] args){
  Frame vinduet = new MainFrame([appletten], [int brede], [int højde] ).show();
}
og så lige importere java.applet.MainFrame; (så vidt jeg husker)
Avatar billede bamse2000 Nybegynder
18. august 2003 - 11:31 #6
okay, kan du uddybe "import ......"?
Avatar billede flodfarmer Nybegynder
18. august 2003 - 16:24 #7
Jeg kikkede lidt efter det efter min kommentar, og det slog mig at det er en klasse jeg bruger under java's 3D API, så den er nok ikke så anvendelig aligevel. Men ellers er det :

import com.sun.j3d.utils.applet.MainFrame;

beklager.
Avatar billede _carsten Nybegynder
19. august 2003 - 19:04 #8
Jeg ved ikke lige hvad du går efter, men her er en frame
som kun tegner cirkler, når der klikkes med musen.

public class DrawTest extends javax.swing.JFrame {
    public DrawTest() {
        initComponents();
        setExtendedState(MAXIMIZED_BOTH);
        show();
    }
   
    private void initComponents() {

        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                g2d.drawOval(evt.getX(), evt.getY(), 30,30);
                repaint();
            }
        });
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        pack();
    }

    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }
   
    public void paint(java.awt.Graphics g){
      if(offscreen == null) {
            offscreen = (java.awt.image.BufferedImage)createImage(this.getWidth(), this.getHeight());
            g2d = offscreen.createGraphics();
            g2d.setColor(new java.awt.Color(255,255,255));
            g2d.fillRect(0, 0, this.getWidth(), this.getHeight());
            g.drawImage(offscreen, 0, 0, this);
            g2d.setColor(new java.awt.Color(0,0,0));
      }
     
      g.drawImage(offscreen, 0, 0, this);
    }

    public static void main(String args[]) {
        new DrawTest();
    }
   
    java.awt.image.BufferedImage offscreen;
    java.awt.Graphics2D g2d;
}
Avatar billede bamse2000 Nybegynder
19. august 2003 - 22:47 #9
Det ser rigtigt ud, dog:
- setExtendedState(MAXIMIZED_BOTH);  - Virker ikke helt...
- Jeg vil gerne kunne lave noget grafisk, dvs. istedet for System.out.println("ok"), hver gang der sker noget i mit program!

Jeg har lidt svært ved at forstå opbygningen af denne klasse nemlig, ved ikke helt hvordan jeg skal lave en metode som f.eks. F.paint("Hej"), printer "Hej" ud i et frame eller tegner en cirker osv..
Avatar billede _carsten Nybegynder
19. august 2003 - 23:03 #10
De mere 'simple' tegnemetoder finder i API'et under java.awt.Graphics

At skrive "Hej" på skærmen gøres sådan:   
    g2d.drawString("Hej",evt.getX(), evt.getY());

Pøv at erstatte "g2d.drawOval(evt.getX(), evt.getY(), 30,30);" med
ovenstående

Opbyningen er svær at forstå, men desværre nødvendig.

Prøv at bytte om på setExtendedState(MAXIMIZED_BOTH); og show();
Avatar billede _carsten Nybegynder
19. august 2003 - 23:14 #11
Prøv at kigge lidt her:
http://java.sun.com/docs/books/tutorial/applet/overview/index.html

Godt nok Applets men tegnestrategien er den samme

Eller er det mere 'Dialogs' du går efter, eksempler her:
http://java.sun.com/docs/books/tutorial/uiswing/components/components.html
Avatar billede bamse2000 Nybegynder
19. august 2003 - 23:33 #12
Okay.. der er lidt læsestof.. tak!
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