Taschenrechner in Java

ChrisCooper

Mitglied
Hallo Freunde!

Ich bin ein Newbie in Java, und habe ein kleines Problem bei dem ich bereits den ganzen Tag an meinem laptop sitze und schon fast verzweifle, vielleicht könnt ihr mir ja helfen!?

Wir sollen einen Taschenrechner programmieren, so einfach wie nur irgend möglich!

soweit auch so gut, JPanel funktioniert einwandfrei, was aber nicht funktioniert ist folgendes:

Die Knöpfe und beschriftungen sollen wir mittels g.drawRect bewerkstelligen, die sichtbaren Zahlen auf den Buttons mit g.drawString. (Geht sicher einfacher, ist aber vom Lehrer so gewünscht!!)

Ich habe meine Buttons und Zahlen zwar schon erledigen können, möchte aber alles in ein Array einbauen, und über dieses ausgeben.



Und genau das Funktioniert nicht!!

Hier mal mein Quellcode aus der Klasse:

Java:
package Übung2;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.*;

public class PaintPanel extends JPanel {

    private int button[];

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        
        button[] = new button[14];

        button[0] = new button(50, 30, 350, 100); //Display

        g.drawRect(50, 150, 50, 50); //Button 1
        g.drawRect(50, 250, 50, 50); //Button 4
        g.drawRect(50, 350, 50, 50); //Button 7
        g.drawRect(150, 150, 50, 50); //Button 2
        g.drawRect(150, 250, 50, 50); //Button 5
        g.drawRect(150, 350, 50, 50); //Button 8
        g.drawRect(250, 150, 50, 50); //Button 3
        g.drawRect(250, 250, 50, 50); //Button 6
        g.drawRect(250, 350, 50, 50); //Button 9
        g.drawRect(350, 150, 50, 50); //Button +
        g.drawRect(350, 250, 50, 50); //Button -
        g.drawRect(350, 350, 50, 50); //Button *
        g.drawRect(350, 450, 50, 50); //Button /
        g.drawRect(250, 450, 50, 50); //Button /
        g.drawRect(50, 450, 150, 50); //Button =

        //Tastenbeschriftung
        g.setFont(new Font("TimesRoman", Font.BOLD, 30));
        g.setColor(Color.BLUE);
        g.drawString("1", 68, 187);
        g.drawString("2", 168, 187);
        g.drawString("3", 268, 187);
        g.drawString("+", 368, 187);
        g.drawString("4", 68, 287);
        g.drawString("5", 168, 287);
        g.drawString("6", 268, 287);
        g.drawString("-", 368, 287);
        g.drawString("7", 68, 387);
        g.drawString("8", 168, 387);
        g.drawString("9", 268, 387);
        g.drawString("*", 368, 390);
        g.drawString("=", 118, 487);
        g.drawString("0", 268, 487);
        g.drawString("/", 368, 487);
    }
}

Wie gesagt, ohne Array funktionierts wunderbar, nur möchte ich eben meine Werte aus g.drawRect und g.drawString mittels Array einlesen und ausgeben!!
Diese beiden Aufrufe funktionieren nicht!!
Java:
button[] = new button();
 
        button[0] = new button(50, 30, 350, 100); //Display


Mit den beiden letzten Schleifen möchte ich dann meine Buttons zeichnen lassen, diese sind allerdings in der Klasse noch nicht implementiert....Aber so in etwa stelle ich mir das dann vor

Java:
for (button b: button){
            g.drawRect(x,y,width, height);
    }
        for (button b: button)
            g.drawString("", WIDTH, WIDTH);
    }


Ich danke euch schon mal recht herzlich für eure Hilfe!!

mfg Chris
 
Zuletzt bearbeitet:

coco07

Bekanntes Mitglied
Hey ChrisCooper,

das funktioniert aus dem Grund nicht, weil die Syntax einer Deklaration so lautet: Datentyp -> Name, und nicht anders herum.
Bedeutet, du musst es genau anders rum schreiben:
Java:
private button[] buttons;
Damit hast du das Array mit dem Namen "buttons"deklariert. Jetzt musst du es nur noch instanziieren:
Java:
buttons = new button[Größe des Arrays];
Das instanziieren kannst du entweder direkt bei der Deklaration oder auch nachher vornehmen.

Initialisieren des ersten Elements in einem Array geht also folgendermaßen:
Java:
button[0] = new button(Parameter);

grüße Fabian!
 
Zuletzt bearbeitet:

ChrisCooper

Mitglied
Danke sehr für die schnelle Antwort!!

Es funktioniert!! kleine Fehler haben sehr oft große Auswirkungen wie man merkt...


Danke, Danke, Danke!!!!!!
 

ChrisCooper

Mitglied
So jetzt hab ich noch eine kleine Frage

Wie schreibe ich die Schleife genau welche die Arrays ins JPanel zeichnet??

Diese funktioniert nicht:
Java:
for (int i = 0; i <= buttons.length;i++){
            g.drawRect(i, i, i, i);
        }

Sry, ich stell mich ja echt dumm an heute!!
 
Zuletzt bearbeitet:

coco07

Bekanntes Mitglied
Hehe kein Problem ;)

Ich nehme an, du möchtest dir die einzelnen Objektreferenzen aus dem Array holen, um die "buttons" dann zu zeichnen?
Du kommst über die array[index] Schreibweise an das Objekt heran.
Java:
for(int i=0;i<buttons.length;i++){
g.drawRect(buttons[i].x, buttons[i].y, buttons[i].width, buttons[i].height)
}

Ich weiß jetzt natürlich nicht, wie die buttons-Klasse bei dir aussieht. Müsstest also eventuell statt den direkten Instanzvariablen deine Getter Methoden aufrufen ;)

Übrigens schreibt man Klassen immer CamelCase. Der erste Buchstabe und jeder Buchstabe eines weiteren Wortes immer groß. Beispiel: "EineKlasse".

grüße Fabian!
 

ChrisCooper

Mitglied
Meine Button Klasse sieht wie folgt aus:

Java:
package Übung2;

/**
 *
 * @author Chris
 */
public class Button{
    public int x;
    public int y;
    public int width;
    public int height;
    public Button(int x, int y, int width, int height){
        this.x=x;
        this.y=y;
        this.width=width;
        this.height=height;
    }

    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }

    public int getWidth() {
        return width;
    }

    public int getHeight() {
        return height;
    }
    
    
}

Das ist jetzt die Paintpanel Klasse

Java:
package Übung2;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import javax.swing.*;

public class PaintPanel extends JPanel {

    
   private Button[] buttons;
   private Caption[] captions;

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        
        buttons = new Button[16];
        
        buttons[0] = new Button(50, 30, 350, 100); //Display
        buttons[1] = new Button(50, 150, 50, 50); //Button 1
        buttons[2] = new Button(50, 250, 50, 50); //Button 4
        buttons[3] = new Button(50, 350, 50, 50); //Button 7
        buttons[4] = new Button(150, 150, 50, 50); //Button 2
        buttons[5] = new Button(150, 250, 50, 50); //Button 5
        buttons[6] = new Button(150, 350, 50, 50); //Button 8
        buttons[7] = new Button(250, 150, 50, 50); //Button 3
        buttons[8] = new Button(250, 250, 50, 50); //Button 6
        buttons[9] = new Button(250, 350, 50, 50); //Button 9
        buttons[10] = new Button(350, 150, 50, 50); //Button +
        buttons[11] = new Button(350, 250, 50, 50); //Button -
        buttons[12] = new Button(350, 350, 50, 50); //Button *
        buttons[13] = new Button(350, 450, 50, 50); //Button /
        buttons[14] = new Button(250, 450, 50, 50); //Button /
        buttons[15] = new Button(50, 450, 150, 50); //Button =

        //Tastenbeschriftung
        g.setFont(new Font("TimesRoman", Font.BOLD, 30));
        g.setColor(Color.BLUE);
        captions[0] = new Caption("1", 68, 187);
        captions[1] = new Caption("2", 168, 187);
        captions[2] = new Caption("3", 268, 187);
        captions[3] = new Caption("+", 368, 187);
        captions[4] = new Caption("4", 68, 287);
        captions[5] = new Caption("5", 168, 287);
        captions[6] = new Caption("6", 268, 287);
        captions[7] = new Caption("-", 368, 287);
        captions[8] = new Caption("7", 68, 387);
        captions[9] = new Caption("8", 168, 387);
        captions[10] = new Caption("9", 268, 387);
        captions[11] = new Caption("*", 368, 390);
        captions[12] = new Caption("=", 118, 487);
        captions[13] = new Caption("0", 268, 487);
        captions[14] = new Caption("/", 368, 487);
        
        for(int i=0;i<buttons.length;i++){
g.drawRect(buttons[i].getX(), buttons[i].getY(), buttons[i].getWidth(), buttons[i].getHeight());
         }
for (int i = 1; i < captions.length; i++) {
g.drawString(captions[i].getString(), captions[i].getX(), captions[i].getY());
        }
    }
}

Irgendwas scheint noch nicht zu passen, es kommen folgende Fehler:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Übung2.PaintPanel.paintComponent(PaintPanel.java:40)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:585)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5226)
at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1529)
at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1452)
at javax.swing.RepaintManager.paint(RepaintManager.java:1249)
at javax.swing.JComponent.paint(JComponent.java:1040)
at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:78)
at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:115)
at java.awt.Container.paint(Container.java:1967)
at java.awt.Window.paint(Window.java:3877)
at javax.swing.RepaintManager$3.run(RepaintManager.java:819)
at javax.swing.RepaintManager$3.run(RepaintManager.java:796)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:796)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:769)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:718)
at javax.swing.RepaintManager.access$1100(RepaintManager.java:62)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1677)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:312)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
 
Zuletzt bearbeitet:

ChrisCooper

Mitglied
Ich hab den Fehler gefunden, wäre nicht schlecht wenn ich die Caption Schleife initialisiert hätte...

Folgendes hat das problem gelöst

Java:
captions = new Caption[15];

Danke nochmal für Eure Hilfe!!!!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
P Hilfe bei Java Taschenrechner Java Basics - Anfänger-Themen 25
H Java Taschenrechner Java Basics - Anfänger-Themen 4
M Java Taschenrechner (if-else) Java Basics - Anfänger-Themen 11
M Java Taschenrechner Programmieren Java Basics - Anfänger-Themen 12
Z Java Taschenrechner Java Basics - Anfänger-Themen 6
J Erste Schritte Java CMD Taschenrechner mit Parametern! Java Basics - Anfänger-Themen 16
B Klassen Java Taschenrechner mit Klassen und Methoden Java Basics - Anfänger-Themen 12
B Erste Schritte Brauche Hilfe bei einem Java-Taschenrechner Java Basics - Anfänger-Themen 11
I Java Starthilfe (Taschenrechner) Java Basics - Anfänger-Themen 7
S Taschenrechner in Java - sinnvoll? Java Basics - Anfänger-Themen 3
D Rücktaste bei einem Java Taschenrechner Java Basics - Anfänger-Themen 6
R Java-Taschenrechner Funktioniert nicht Java Basics - Anfänger-Themen 16
B Java Taschenrechner - JFrame Java Basics - Anfänger-Themen 5
B Java-Frame Taschenrechner - String -> Int und umgekehrt Java Basics - Anfänger-Themen 8
S Java-Taschenrechner. Hilfe Java Basics - Anfänger-Themen 10
X Taschenrechner mit Java Swing Java Basics - Anfänger-Themen 2
L Taschenrechner Problem Java Basics - Anfänger-Themen 4
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
R Operatoren Rechenoperation verwenden für Taschenrechner. Java Basics - Anfänger-Themen 32
S while Schleife Taschenrechner Java Basics - Anfänger-Themen 1
J Taschenrechner mit mehr als 2 Zahlen. Java Basics - Anfänger-Themen 18
R Einfacher Taschenrechner mit Eclipse Java Basics - Anfänger-Themen 3
M Einfacher Taschenrechner Java Basics - Anfänger-Themen 2
Fiedelbambu Prüfen von Komma stelle beim Taschenrechner Java Basics - Anfänger-Themen 5
JordenJost Taschenrechner problem Java Basics - Anfänger-Themen 5
Y Taschenrechner programmieren Java Basics - Anfänger-Themen 3
G Taschenrechner ergibt Fehler in if-Abfrage Java Basics - Anfänger-Themen 6
K Erste Schritte "Taschenrechner" zeigt keine Komma Zahlen an. Java Basics - Anfänger-Themen 8
C Potenzberechnung über switch case. Taschenrechner mit Eingabe über einen grafischen Dialog Java Basics - Anfänger-Themen 22
E JavaFX Taschenrechner Eingabe im Textfield beschränken Java Basics - Anfänger-Themen 2
E Taschenrechner GUI Problem mit Fehlerhandling Java Basics - Anfänger-Themen 6
C Taschenrechner (switch) in Taschenrechner mit Methoden umwandeln Java Basics - Anfänger-Themen 115
W Taschenrechner mit Switch case Java Basics - Anfänger-Themen 4
W Taschenrechner Java Basics - Anfänger-Themen 11
A Taschenrechner mit Gui erstellen Java Basics - Anfänger-Themen 9
2 Taschenrechner mit GUI Problem bei der Berechnung Java Basics - Anfänger-Themen 8
P Taschenrechner mit unendlich vielen Eingabemöglichkeiten Java Basics - Anfänger-Themen 1
V Erste Schritte Taschenrechner mit beliebig vielen Zahlen Java Basics - Anfänger-Themen 5
S Taschenrechner Java Basics - Anfänger-Themen 13
P Taschenrechner Text übertragung Java Basics - Anfänger-Themen 3
S Compiler-Fehler Basic- Taschenrechner/ Fehler Java Basics - Anfänger-Themen 8
S Basic- Taschenrechner? Java Basics - Anfänger-Themen 7
F Erste Schritte Frage zu simplem Taschenrechner(switch) Java Basics - Anfänger-Themen 16
L Mein Taschenrechner lässt sich plötzlich nicht mehr öffnen Java Basics - Anfänger-Themen 5
S Taschenrechner hilfe! Java Basics - Anfänger-Themen 17
R Variablen Taschenrechner mit Komfortfunktionen Java Basics - Anfänger-Themen 2
J RPN Taschenrechner - keine Lösung!! Java Basics - Anfänger-Themen 84
L Taschenrechner mit switch und while funktioniert noch nicht richtig Java Basics - Anfänger-Themen 22
Q simpler Taschenrechner Java Basics - Anfänger-Themen 34
R Taschenrechner NullPointerException Java Basics - Anfänger-Themen 1
R Variablen Weitergehenderr Taschenrechner Java Basics - Anfänger-Themen 4
F Taschenrechner "Error loading class..." Java Basics - Anfänger-Themen 5
P Erste Schritte Taschenrechner mit if-else Anweisung Java Basics - Anfänger-Themen 6
G Taschenrechner gibt nur 0.0 aus Java Basics - Anfänger-Themen 8
A Taschenrechner programmieren Java Basics - Anfänger-Themen 21
J Kleiner Taschenrechner! Anfänger braucht Hilfe :( Java Basics - Anfänger-Themen 2
J Taschenrechner: Probleme Java Basics - Anfänger-Themen 5
E Taschenrechner problem! Ich komme nicht voran Java Basics - Anfänger-Themen 18
R Erste Schritte Taschenrechner mit Schleife Java Basics - Anfänger-Themen 24
Lord.Djerun (Taschenrechner Netbeans) Komma nur einmal schreiben & 0 ersetzen Java Basics - Anfänger-Themen 1
Z Taschenrechner - Additions/Substraktions/Multiplikations/Divionsketten! Java Basics - Anfänger-Themen 4
D Taschenrechner Frage Java Basics - Anfänger-Themen 12
Z Sehr simpler Taschenrechner - Hilfe! Java Basics - Anfänger-Themen 10
Z Taschenrechner - Wie addiere,multipliziere und subtrahiere ich? Java Basics - Anfänger-Themen 6
D kleiner Taschenrechner mit switch fehlerhaft Java Basics - Anfänger-Themen 1
K Taschenrechner im GUI Java Basics - Anfänger-Themen 2
P Taschenrechner, operatoren Java Basics - Anfänger-Themen 4
D Simpler Taschenrechner Java Basics - Anfänger-Themen 6
A Anfänger Taschenrechner Frage Java Basics - Anfänger-Themen 14
R Erste Schritte Taschenrechner - Punkt-vor-Strich Rechnung Java Basics - Anfänger-Themen 1
S Operatoren Taschenrechner Ergebnis ausgeben Java Basics - Anfänger-Themen 7
A Taschenrechner zeigt Error Java Basics - Anfänger-Themen 7
J Taschenrechner Funktion Java Basics - Anfänger-Themen 18
M Taschenrechner fertigstellung Java Basics - Anfänger-Themen 1
N Methoden Taschenrechner Java Basics - Anfänger-Themen 2
F z = input.nextChar(); PROBLEM Taschenrechner Java Basics - Anfänger-Themen 7
J Scanner Taschenrechner? Java Basics - Anfänger-Themen 7
J Variablen Rechenzeichen und Zahlen verknüpfen für einen Taschenrechner Java Basics - Anfänger-Themen 17
R Methoden Taschenrechner Java Basics - Anfänger-Themen 4
P Taschenrechner , IF-Abfrage Java Basics - Anfänger-Themen 12
I Taschenrechner - Methoden implementieren Java Basics - Anfänger-Themen 5
J Taschenrechner Problemchen Java Basics - Anfänger-Themen 3
D Erste Schritte Taschenrechner Java Basics - Anfänger-Themen 11
K taschenrechner - Fehler beim Kürzen eines Bruches finden Java Basics - Anfänger-Themen 20
J Taschenrechner Punkt vor Strich Java Basics - Anfänger-Themen 9
A Taschenrechner programmieren Java Basics - Anfänger-Themen 5
M Ausklappbares Fenster bei grafischem Taschenrechner Java Basics - Anfänger-Themen 2
M Dividieren bei Grafischem Taschenrechner klappt nicht Java Basics - Anfänger-Themen 2
N Taschenrechner mit Unterprogra Java Basics - Anfänger-Themen 6
C Taschenrechner Java Basics - Anfänger-Themen 12
Z Taschenrechner programmieren Java Basics - Anfänger-Themen 5
E Erste Schritte Taschenrechner Java Basics - Anfänger-Themen 8
K Taschenrechner Java Basics - Anfänger-Themen 25
J Textfeld für Taschenrechner Java Basics - Anfänger-Themen 3
D Taschenrechner Java Basics - Anfänger-Themen 28
A Taschenrechner-GUI mit BorderLayout? Java Basics - Anfänger-Themen 6
W [PROJEKT] Simpler grafischer Taschenrechner Java Basics - Anfänger-Themen 8
M Taschenrechner mit JApplet Java Basics - Anfänger-Themen 26
J Grafischen Taschenrechner programmieren - Frage dazu Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben