"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

[JAVA]Newbie Fehler?!

das_pseudonym 11.12.2004 - 20:33 1559 16 Thread rating
Posts

das_pseudonym

Little Overclocker
Avatar
Registered: May 2003
Location: Wien
Posts: 112
Hey Leute findet irgendwer den Fehler in dem Prog?!
(Soll a Paintprogramm werden, ich versuch grad die konturen eines Rechteckes zu zeichnen das man aufziehen kann)

Hier der Code:

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
 * <p>Überschrift: </p>
 * <p>Beschreibung: </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Organisation: </p>
 * @author unbekannt
 * @version 1.0
 */

public class Drawer extends JFrame {
  int Xanf=0, Yanf=0, Xend=0, Yend=0;
  JButton BLinie = new JButton();
  JButton BRechteck = new JButton();
  GridLayout gridLayout1 = new GridLayout(7,1);


  //Den Frame konstruieren
  public Drawer() {
    super("Mein Painter");
    try {
      setSize(new Dimension(500, 500));
      jbInit();
      show();
    }
    catch (Exception e) {
      e.printS*****race();
    }
  }

  public static void main(String[] args)
  {
    Drawer Programm=new Drawer();

  }

  //Initialisierung der Komponenten
  private void jbInit() throws Exception {
    East_Panel Panel_East=new East_Panel();
    Center_Panel Panel_Center = new Center_Panel();
    South_Panel Panel_South = new South_Panel();
    Panel_East.setLayout(gridLayout1);
    this.getContentPane().add(Panel_South, BorderLayout.SOUTH);
    this.getContentPane().add(Panel_Center, BorderLayout.CENTER);
    this.getContentPane().add(Panel_East, BorderLayout.EAST);
  }
  class East_Panel extends JPanel
  {
    East_Panel()
    {
      super();
      BLinie.setText("Linie");
      BRechteck.setText("Rechteck");
      add(BLinie, null);
      add(BRechteck, null);
    }
  }
  class Center_Panel extends JPanel
  {
    Graphics g;
    Center_Panel()
    {
      super();
      this.addMouseListener(new MHandler());
      this.addMouseMotionListener(new MMHandler());
    }
    public void paintComponent(Graphics g)
      {
        g.drawRect(Xanf, Yanf, Xanf-Xend, Yanf-Yend);
        super.paintComponent(g);
      }

    class MHandler extends MouseAdapter
    {
      public void mousePressed(MouseEvent e)
      {
        Xanf=e.getX();
        Yanf=e.getY();
      }
    }
    class MMHandler extends MouseMotionAdapter
    {
      public void mouseDragged(MouseEvent e)
      {
        Xend=e.getX();
        Yend=e.getY();
        paintComponent(g);
      }
    }
  }
  class South_Panel extends JPanel
  {
    South_Panel(){}
  }
}

also was mach ich falsch?!?!
Bearbeitet von das_pseudonym am 11.12.2004, 20:41

gue

Addicted
Avatar
Registered: Feb 2003
Location: Linz
Posts: 400
Code:
java.lang.NullPointerException
        at Drawer$Center_Panel.paintComponent(Drawer.java:72)
        at Drawer$Center_Panel$MMHandler.mouseDragged(Drawer.java:90)
        at java.awt.Component.processMouseMotionEvent(Unknown Source)
        at javax.swing.JComponent.processMouseMotionEvent(Unknown Source)
...
paintComponent(Graphics) in Center_Panel wird anscheinend mit null aufgerufen. Am besten, du benutzt einen Canvas, den du auf das Panel legst und dessen paintComponent Methode du überschreibst.
Btw solltest du dich an die Java-Codingconventions halten (Bezeichner klein schreiben usw.).

Edit: und schreib in deinen Constructor
setDefaultCloseOperation(EXIT_ON_CLOSE);
damit das Programm beendet wird, wenn du das Fenster schließt (kannst du ja später umändern, wenn du das abfangen willst).
Bearbeitet von gue am 11.12.2004, 20:58

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Wenn du nächstes Mal so eine Frage stellst, schreib wenigstens dazu, was nicht funktioniert.

das_pseudonym

Little Overclocker
Avatar
Registered: May 2003
Location: Wien
Posts: 112
sry vergessen

hab a bissal was verändert is aber immer noch der selbe fehler
was soll ich tun?
immer wenn ma im CenterPanel ein rechteck aufziehen will kommen massig viele fehlermeldungen!

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
 * <p>Überschrift: </p>
 * <p>Beschreibung: </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Organisation: </p>
 * @author unbekannt
 * @version 1.0
 */

public class Drawer extends JFrame {
  int Xanf = 0, Yanf = 0, Xend = 0, Yend = 0;
  JButton BLinie = new JButton();
  JButton BRechteck = new JButton();
  GridLayout gridLayout1 = new GridLayout(7, 1);
  GridLayout gridLayout2 = new GridLayout(1,2);

  //Den Frame konstruieren
  public Drawer() {
    super("Mein Painter");
    try {
      setSize(new Dimension(500, 500));
      jbInit();
      show();
    }
    catch (Exception e) {
      e.printS*****race();
    }
  }

  public static void main(String[] args) {
    Drawer Programm = new Drawer();

  }

  //Initialisierung der Komponenten
  private void jbInit() throws Exception {
    East_Panel Panel_East = new East_Panel();
    Center_Panel Panel_Center = new Center_Panel();
    South_Panel Panel_South = new South_Panel();
    Panel_East.setLayout(gridLayout1);
    Panel_South.setLayout(gridLayout2);
    this.getContentPane().add(Panel_South, BorderLayout.SOUTH);
    this.getContentPane().add(Panel_Center, BorderLayout.CENTER);
    this.getContentPane().add(Panel_East, BorderLayout.EAST);
  }

  class East_Panel
      extends JPanel {
    public East_Panel() {
      super();
      BLinie.setText("Linie");
      BRechteck.setText("Rechteck");
      add(BLinie, null);
      add(BRechteck, null);
    }
  }

  class Center_Panel
      extends JPanel {
    Graphics g;
    public Center_Panel() {
      super();
      this.addMouseListener(new MouseAdapter() {
        public void mousePressed(MouseEvent e) {
          Xanf = e.getX();
          Yanf = e.getY();
        }
      });
      this.addMouseMotionListener(new MouseMotionAdapter() {
        public void mouseDragged(MouseEvent e) {
          Xend = e.getX();
          Yend = e.getY();
          paintComponent(g);
          validate();
        }
      });
    }

    public void paintComponent(Graphics g) {
      g.drawRect(Xanf, Yanf, Xanf - Xend, Yanf - Yend);
      super.paintComponent(g);
    }
  }

  class South_Panel extends JPanel {
    JLabel XKoo = new JLabel("X:");
    JLabel YKoo = new JLabel("Y:");
    
    public South_Panel() {
      add(XKoo, null);
      add(YKoo, null);
    }
  }
}

MfG

pseudo
Bearbeitet von das_pseudonym am 12.12.2004, 01:12

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Wenn du net bald die Java-Version und Fehlermeldungen dazuschreibst close ich den Thread, so bringt das nix.

gue

Addicted
Avatar
Registered: Feb 2003
Location: Linz
Posts: 400
Ich weiß, ich sollte ihm normalerweise nicht helfen aber ich machs trotzdem :o :)
1. "hab a bissal was verändert is aber immer noch der selbe fehler" naja die Listener in anonyme Klassen packen ist nicht unbedingt viel "verändern" ;)
2. Das Problem liegt offensichtlich im MouseMotionListener vom CenterPanel. Dort rufst du paintComponent(g); auf, wobei g nie irgendwo initialisiert wurde. Ersetze das durch ein repaint(); dann sollten zumindest die Exceptions nicht mehr geworfen werden.
3. Du verwendest eine deprecated API (setVisible(true) anstatt show() verwenden).
4. Das ganze funktioniert trotzdem noch nicht, weil du noch irgendwo einen Fehler in der Programmlogik hast.
5. Das nächste mal genauer beschreiben, wo dein Problem liegt und zumindest den S*****race dazugeben ;)

das_pseudonym

Little Overclocker
Avatar
Registered: May 2003
Location: Wien
Posts: 112
So hab jez ein bissal was ausbessert laut gue und hab die fehlermeldungen jez wegbekommen es sind aber weitere Fehler aufgetreten und ein Problem hab ich noch.

1. Wenn man die Maus auf dem Panel_center bewegt dann erscheint die X, Y Koordiante nicht nur im SouthPanel sondern auch imoberen linken Eck vom CenterPanel ebenso wenn man einen button drückt wird dieser im centerpanel im oberen linken eck gezeichnet.

2. Die bereits gezeichneten Rechtecke löschen sich nicht also ich bräuchte nen Befehl der das ganze CenterPanel "leert" in der docu hab ich allerdings nichts gefunden

ich weiß ich geh euch am ***** aber BITTE HELFT MIR!!

Hier der veränderte Code:

Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
 * <p>Überschrift: </p>
 * <p>Beschreibung: </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Organisation: </p>
 * @author unbekannt
 * @version 1.0
 */

public class Drawer extends JFrame {
  int Xanf = 0, Yanf = 0, Xend = 0, Yend = 0;
  JButton BLinie = new JButton();
  JButton BRechteck = new JButton();
  GridLayout gridLayout1 = new GridLayout(7, 1);
  GridLayout gridLayout2 = new GridLayout(1,2);
  JLabel XKoo = new JLabel("X:");
  JLabel YKoo = new JLabel("Y:");

  //Den Frame konstruieren
  public Drawer() {
    super("Mein Painter");
    try {
      addWindowListener(new WindowAdapter() {
                                  public void windowClosing(WindowEvent e) {
                                     System.exit(0);
                                  }
                               });
      setSize(new Dimension(500, 500));
      jbInit();
      show();
    }
    catch (Exception e) {
      e.printS*****race();
    }
  }

  public static void main(String[] args) {
    Drawer Programm = new Drawer();

  }

  //Initialisierung der Komponenten
  private void jbInit() throws Exception {
    East_Panel Panel_East = new East_Panel();
    Center_Panel Panel_Center = new Center_Panel();
    South_Panel Panel_South = new South_Panel();
    Panel_East.setLayout(gridLayout1);
    Panel_South.setLayout(gridLayout2);
    this.getContentPane().add(Panel_South, BorderLayout.SOUTH);
    this.getContentPane().add(Panel_Center, BorderLayout.CENTER);
    this.getContentPane().add(Panel_East, BorderLayout.EAST);
  }

  class East_Panel
      extends JPanel {
    public East_Panel() {
      super();
      BLinie.setText("Linie");
      BRechteck.setText("Rechteck");
      add(BLinie, null);
      add(BRechteck, null);
    }
  }

  class Center_Panel
      extends JPanel {
      public Center_Panel() {
      super();
      this.setBackground(Color.WHITE);
      this.addMouseListener(new MouseAdapter() {
        public void mousePressed(MouseEvent e) {
          Xanf = e.getX();
          Yanf = e.getY();
        }
      });
      this.addMouseMotionListener(new MouseMotionAdapter() {
        public void mouseDragged(MouseEvent e) {
          Xend = e.getX();
          Yend = e.getY();
          repaint();
          validate();
        }
      });
      this.addMouseMotionListener(new MouseMotionAdapter(){
        public void mouseMoved(MouseEvent e)
        {
          XKoo.setText("X: " + e.getX());
          YKoo.setText("Y: " + e.getY());
        }
        });
    }
    public void paint(Graphics g){
      g.setColor(Color.BLACK);
      
      if(Xend<Xanf && Yend<Yanf)
      {
        g.drawRect(Xend, Yend, Xend - Xanf, Yend - Yanf);
      }
      else
      {
        g.drawRect(Xanf, Yanf, Xend - Xanf, Yend - Yanf);
      }
      super.repaint();
    }
  }

  class South_Panel extends JPanel {

    public South_Panel() {
      this.add(XKoo, null);
      this.add(YKoo, null);
      validate();
    }
  }
}

MfG

tia

pseudo

gerhardtt

Big d00d
Registered: Aug 2000
Location:
Posts: 333
wieso schreibst du nie die fehlermeldung hinzu? so zwingst du jemanden der dir helfen will den code auszuführen...

das_pseudonym

Little Overclocker
Avatar
Registered: May 2003
Location: Wien
Posts: 112
DA GIBTS KEINE FEHLERMELDUNGEN!!!
mann

Dreamwatcher

Addicted
Avatar
Registered: Sep 2003
Location: the eyeland
Posts: 404
Zitat von das_pseudonym
Zitat von Corran_Horn
naja aber der rest geht ja ...

einschicken geht ned da mein vater die rechnung verschmissen hat! :(

Ansonsten keine möglichkeiten das zu fixen?

es gibt sie also doch.....:rolleyes:

das_pseudonym

Little Overclocker
Avatar
Registered: May 2003
Location: Wien
Posts: 112
hast du den neuen beitrag schon gelesen??? du brauchst nicht auf sachen von gestern herumhacken *kopfschüttel*

gerhardtt

Big d00d
Registered: Aug 2000
Location:
Posts: 333
EDIT: na - ich verschwend nur mei energie

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Also lass uns zusammenfassen: Du willst Hilfe, stellst dürftige Information zur Verfügung, auf mehrmaliges Nachfragen widerwillig sogar mehr. Dann beschimpfst du Leute, die deine chaotische Fragestellung nicht mehr überschauen und erwartest anscheinend von uns, dass wir riechen können, dass du dein gestriges Problem mit den Fehlermeldungen heute schon gelöst hast und jetzt ein anderes hast.

Gut, wenn du glaubst, dass du so Hilfe bekommst, will ich dich nicht aufhalten...

das_pseudonym

Little Overclocker
Avatar
Registered: May 2003
Location: Wien
Posts: 112
HILFE warum hört mir denn keiner zu? ich finde mein letzter beitrag damit mein ich den letzten mit code war wohl mit den nötigen informationen bestückt oder? die probleme wurden erklärt und der code ist auch eingefügt aber da irgendwie sich keiner dazu ermiächtigt sich die LETZTEN beiträge von mir durchzulesen anstatt den ersten 2 kann mich wohl keiner verstehen also ich hab nen fehler gemacht hab mich entschuldigt und hab mich verbessert im gegensatz zu euch die ihr euch noch immer über meine vorangegangenen fehler aufregt ich sag nur

DANKE

das nenn ich sozial

MfG

pseudo

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Zitat von das_pseudonym
ich finde mein letzter beitrag damit mein ich den letzten mit code war wohl mit den nötigen informationen bestückt oder?
Stimmt.

Wenn du nicht so herumgeschimpft hättest, hätte ich's mir auch angeschaut.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz