Avatar billede divad89 Nybegynder
20. januar 2007 - 16:26 Der er 7 kommentarer

Skiftevis lave linje, rektangel og oval

Jeg skal til at lave et program hvor den skiftevis skifter mellem en linje, rektangel og oval, ved tryk på musen, jeg har allerede lavet et program der laver en linje:

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

class Linjelytter implements MouseListener
{
  public Linjetegning vinduet;               
  public void mousePressed(MouseEvent hændelse)
  {
    vinduet.trykpunkt = hændelse.getPoint();
  }

  public void mouseReleased(MouseEvent hændelse)
  {
    vinduet.slippunkt = hændelse.getPoint();
    vinduet.repaint();
  }

public void mouseClicked(MouseEvent event) {}
public void mouseEntered (MouseEvent event) {}
public void mouseExited (MouseEvent event) {}
}

class Linjetegning extends Frame
{
  public Point trykpunkt;
  public Point slippunkt;

  public Linjetegning()
  {
    Linjelytter lytter = new
Linjelytter();
    lytter.vinduet= this;
    this.addMouseListener(lytter);
  }

  public void paint(Graphics g)
  {
    g.drawString("tryk "+trykpunkt.x+" , "+trykpunkt.y,trykpunkt.x,trykpunkt.y);
    g.drawString("slip "+slippunkt.x+" , "+slippunkt.y,slippunkt.x, slippunkt.y);
    if (trykpunkt != null && slippunkt != null)
    {
      g.setColor(Color.BLUE);
      g.drawLine(trykpunkt.x, trykpunkt.y, slippunkt.x, slippunkt.y);
    }
  }
}


public class hændelse2
{
    public static void main(String[] arg)
    {
        Linjetegning vindue = new Linjetegning();
        vindue.setSize(400,400);
        vindue.setTitle("GrafiskVindue");
        vindue.setVisible(true);

    }
}

Men er lidt usikker på hvordan man skal lave det ved at skifte, jeg kunne tænke mig at det skulle være ved if og else sætninger, men jeg ved ikke helt hvordan.

Med venlig hilsen
David
Avatar billede winners79 Nybegynder
20. januar 2007 - 19:07 #1
int tæller = 0;
       
        if (tæller%3==0)
            System.out.println("Tegn Linje");
        else if (tæller%3==1)
            System.out.println("Tegn Oval");
        else if (tæller%3==2)
            System.out.println("Tegn Trekant");
       
        tæller++;
Avatar billede divad89 Nybegynder
21. januar 2007 - 17:09 #2
Nu har jeg prøvet at gøre som du sagde winners79, men det virker ikke lige umiddelbart, så jeg har prøvet følgende:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

class Linjelytter implements MouseListener
{
  public Linjetegning vinduet;
  public void mousePressed(MouseEvent hændelse)
  {
    vinduet.trykpunkt = hændelse.getPoint();
  }

  public void mouseReleased(MouseEvent hændelse)
  {
    vinduet.slippunkt = hændelse.getPoint();
    vinduet.repaint();
  }

public void mouseClicked(MouseEvent event) {}
public void mouseEntered (MouseEvent event) {}
public void mouseExited (MouseEvent event) {}
}

class Linjetegning extends Frame
{
  public Point trykpunkt;
  public Point slippunkt;

  public Linjetegning()
  {
    Linjelytter lytter = new
    Linjelytter();
    lytter.vinduet= this;
    this.addMouseListener(lytter);
  }

  public void paint(Graphics g)
  {
    g.drawString("tryk "+trykpunkt.x+" , "+trykpunkt.y,trykpunkt.x,trykpunkt.y);
    g.drawString("slip "+slippunkt.x+" , "+slippunkt.y,slippunkt.x, slippunkt.y);
   
    int n;
   
    for (n=0; n<=10; n++)
    {
        if (n==0)
    g.drawLine(trykpunkt.x, trykpunkt.y, slippunkt.x, slippunkt.y);
else if (n==1)
    g.drawRect(trykpunkt.x, trykpunkt.y, slippunkt.x, slippunkt.y);
else if (n==2)
    g.drawOval(trykpunkt.x, trykpunkt.y, slippunkt.x, slippunkt.y);

    }
  }
}
public class hændelse2
{
    public static void main(String[] arg)
    {
        Linjetegning vindue = new Linjetegning();
        vindue.setSize(400,400);
        vindue.setTitle("GrafiskVindue");
        vindue.setVisible(true);

    }
}

Men hver gang når jeg kører den, og jeg trykker viser den alle sammen på én gang, hvordan kan det være?

Med venlig hilsen
David
Avatar billede jime_boy Nybegynder
21. januar 2007 - 21:53 #3
Du mangler åbne og lukker tegn til din if sætninger

{
        if (n==0){
    g.drawLine(trykpunkt.x, trykpunkt.y, slippunkt.x, slippunkt.y);}
else if (n==1){
    g.drawRect(trykpunkt.x, trykpunkt.y, slippunkt.x, slippunkt.y);}
else if (n==2){
    g.drawOval(trykpunkt.x, trykpunkt.y, slippunkt.x, slippunkt.y);}

    }
Avatar billede jime_boy Nybegynder
21. januar 2007 - 21:56 #4
Yderligere kan jeg ikke se nogle steder at du tæller de antal klik der har været.
Avatar billede winners79 Nybegynder
22. januar 2007 - 01:39 #5
int n;
 
    for (n=0; n<=10; n++)
    {
        if (n==0)
    g.drawLine(trykpunkt.x, trykpunkt.y, slippunkt.x, slippunkt.y);
else if (n==1)
    g.drawRect(trykpunkt.x, trykpunkt.y, slippunkt.x, slippunkt.y);
else if (n==2)
    g.drawOval(trykpunkt.x, trykpunkt.y, slippunkt.x, slippunkt.y);

    }

Denne løkke tegner alle op....

Desuden er dine if sætninger fine, behøver kun tuborg klammer hvis der er mere end en linje under "if".
Avatar billede winners79 Nybegynder
22. januar 2007 - 02:05 #6
Denne virker:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Program extends JFrame {


    private JButton minKnap = new JButton("Press Me");
    private CustomPanel panel = new CustomPanel();
   
    public Program() {
        setLayout(null);
        setSize(400, 400);
        minKnap.addActionListener(new ButtonListener());
        minKnap.setBounds(200, 200, 100, 25);
        add(minKnap);
        panel.setBounds(0, 0, 200, 200);
        add(panel);
    }

    public class ButtonListener implements ActionListener {

        public void actionPerformed(ActionEvent e) {
           
            panel.setTæller(panel.getTæller()+1);
           
            if (panel.isFirstTime())
                panel.setFirstTime(false);
        }

    }
}
_____________________________________________________________________
import java.awt.Graphics;

import javax.swing.JPanel;

public class CustomPanel extends JPanel {

    private boolean firstTime = true;
    private int tæller = 0;
   
    public CustomPanel() {

    }
   
    public void paintComponent(Graphics g){
        if (!firstTime){
            g.clearRect(0, 0, getWidth(), getHeight());
            if (tæller%3 == 0)
                g.drawString("Her er en Linje", 50, 50);
            if (tæller%3 == 1)
                g.drawString("Her er en Trekant", 50, 50);
            if (tæller%3 == 2)
                g.drawString("Her er en Oval", 50, 50);
            }
    }

    public boolean isFirstTime() {
        return firstTime;
    }

    public void setFirstTime(boolean firstTime) {
        this.firstTime = firstTime;
    }

    public int getTæller() {
        return tæller;
    }

    public void setTæller(int tæller) {
        this.tæller = tæller;
        repaint();
    }
   
   
}
Avatar billede divad89 Nybegynder
22. januar 2007 - 10:24 #7
Jeg siger mange tak for alle jeres hurtige svar, men jeg kan stadig ikke få den til at virke, heller ikke den sidste, den tegner alle sammen på én gang. Nogen der ved hvordan man får den til ikke at gøre det?

Med venlig hilsen
David
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