Swing Rechteck zeichnen

Status
Nicht offen für weitere Antworten.
B

Bernd1983

Gast
hi, hab ein Problem ein Rechteck zu zeichnen

Code:
class Quad extends Figure {
    
    int x,y,w,h;


    

    
        Quad(int x,int y, int w, int h){
           super(x);
           this.y=y;
           this.w=w;
           this.h=h;
        }
        
        public void paintMe(Graphics g){
            g.drawRect(x,y,w,h);
            
        }
        
    
}

und swing:

Code:
class SwingDemo extends JFrame implements ActionListener{
    
    int a,b,c,d;
    Quad x;
  Graphics y;
  JButton green;
  
  SwingDemo(){
      
      getContentPane().setLayout(new FlowLayout());
      green=new JButton("rechteck?");
      green.addActionListener(this);
      getContentPane().add(green);
      x=new Quad(15,25,7,16);
  
  }
  public void actionPerformed(ActionEvent a){
      
      x.paintMe(y);
      
  }

}



public class DesignPattern {

    
    public static void main(String [] args){
       
    SwingDemo a=new SwingDemo();
    a.setSize(150, 100);
    a.setVisible( true );
    }
}


Ich bekomme eine NullPointerexception.Wieso? Wieso wird kein Rechteck gezeichnet?


grüsse
 

dieta

Top Contributor
Poste mal mehr über die Fehlermeldeung (copy&paste).
In welcher Zeile bekommst du die Exception?
 

Lim_Dul

Top Contributor
Da liegt aber einiges im argen:

Code:
class Quad extends Figure {
   
    int x,y,w,h;
Der Variablen x wird nie ein Wert zugewiesen, daher ist die immer 0.

[ocde]
x.paintMe(y);
[/code]
y ist immer null
 

WieselAc

Top Contributor
ich glaub du bist etwas verrutscht :)


Graphics y; dieses Y wird nie initialisiert, das x auf das paint angewendet wird, wird mit new Quad initialisiert.

in der Quad Klasse selber bleibt das x zwar ohne explizite initialisierung ist aber standardmäßig 0.
 
B

Bernd1983

Gast
hmm ok

y ist nicht initialisiert.

aber wie intitialisiere ich dieses Graphic Objekt:

wenn ich ich im Konstruktor:

y=new Graphics() erzeuge

kann ich nicht übersetzen.

Was soll ich tun?
 

dieta

Top Contributor
Zeichnen tut man normalerweise über die paint bzw. paintComponent-Methode:
Code:
class Quad extends Figure {
   
    int x,y,w,h;


   

   
        Quad(int x,int y, int w, int h){
           super(x);
           this.y=y;
           this.w=w;
           this.h=h;
        }
       
        public void paintComponent(Graphics g){
            super.paintComponent(g);
            g.drawRect(x,y,w,h);
           
        }
       
   
}
Damit das funktioniert, muss die Klasse aber von z.B. JPanel erben. In diesem Fall wärst du am besten beraten, wenn du der Klasse "Figure" ein kleines extends JPanel bescheren würdest.
Dann kannst du das ganze per repaint() neu zeichnen und eben wie ein Panel zu deinem Fenster hinzufügen.

[edit]In den Foren-FAQs gibt's dazu glaube ich auch noch das ein oder andere Thema[/edit]
 
B

Bernd1983

Gast
ja ok thx

hab jetzt meiner abstrakten Klassen ein extends JPanel gegeben und die paintComponent in der Klasse Quad implementiert. bekomme immer noch null pointer ex.

Code:
class SwingDemo extends JFrame implements ActionListener{
    
    
    Quad x;
    Graphics z;
 
  JButton green;
  
  SwingDemo(){
      
      getContentPane().setLayout(new FlowLayout());
      green=new JButton("rechteck?");
      green.addActionListener(this);
      getContentPane().add(green);
      x=new Quad(15,25,7,16);
      
  }
  public void actionPerformed(ActionEvent a){
      
      x.paintComponent(z);
      
  }

greets
 

dieta

Top Contributor
Was für eine NullPonterEx denn? Poste mal, was dir der Compiler rauschmeißt (copy&paste).
Außerdem musst du x noch, da es je ein panel ist zu deinem Frame hinzufügen.
Und außerdem musst du statt
Code:
x.paintComponent(z);
Code:
x.repaint()
schreiben. Damit weist du die VM an, x bei Gelegenheit neu zu zeichnen.
 
B

Bernd1983

Gast
hmm so jetzt versteh ich gar nix mehr. bin noch Anfänger im swing coden.



mein code ist jetzt so:

Code:
class Quad extends Figure{
    
    int x,y,w,h;


    

    
        Quad(int x,int y, int w, int h){
           super(x);
           this.y=y;
           this.w=w;
           this.h=h;
        }
        
        public void paintComponent(Graphics g){
         super.paintComponent(g);
            g.drawRect(x,y,w,h);
        }
        
    
}

und:

Code:
class SwingDemo extends JFrame implements ActionListener{
    
    int a,b,c,d;
    Quad x;
    Graphics z;
 
  JButton green;
  
  SwingDemo(){
      
      getContentPane().setLayout(new FlowLayout());
      green=new JButton("rechteck?");
      green.addActionListener(this);
      getContentPane().add(green);
      x=new Quad(15,25,7,16);
      
  }
  
 
  public void actionPerformed(ActionEvent a){
      
     x.repaint();
      
      
      
      
  }

Wenn ich auf denn Button drücke bekomme ich nichts....?????

Woran liegt das
 

dieta

Top Contributor
Aaalso...
Code:
super(x);
musst du durch
Code:
x=x;
ersetzen.

Hier:
Code:
SwingDemo(){
     
      getContentPane().setLayout(new FlowLayout());
      green=new JButton("rechteck?");
      green.addActionListener(this);
      getContentPane().add(green);
      x=new Quad(15,25,7,16);
     
  }
muss ans Ende noch
Code:
add(x);
damit x auch deinem Fenster hinzugefügt wird.
 
B

Bernd1983

Gast
ja thx.

jetzt wird mir ein quad gezeichnet ohne das ich denn button drücke.

Ich möchte aber den Button drücken und dann wird mir ein Rechteck gezeichnet.??

wie geht das

grüsse
 

WieselAc

Top Contributor
Hier hast du mal ein kleines Beispiel:

Code:
public class Temp extends JPanel implements ActionListener {
    
    private boolean show;

    public Temp() {
        show = false;
        JButton b = new JButton("draw");
        b.addActionListener(this);
        add(b);
    }

    public void paint(Graphics g) {
        super.paint(g);
        if (show) {
            g.drawRect(50, 50, 50, 50);
        }
    }

    public void actionPerformed(ActionEvent arg0) {
        show = true;
        repaint();
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 400);
        frame.getContentPane().add(new Temp());
        frame.setVisible(true);
    }
}
 

Marco13

Top Contributor
@dieta: Sorry, so eine Klasse von JPanel erben zu lassen ist grober Unfug. Und dass eine Zeile wie
x=x;
keinen Sinn macht, sollte eigentlich jedem einleuchten.
(Warum ich nicht Sänger geworden bin? Ganz einfach: Weil ich nicht singen kann)

@Bernd1983: Ein Kleines, selbstständiges, kompilierbares Beispiel, in dem der Fehler auftritt, ist häufig hilfreich. In diesem Beispiel tritt der Fahler zwar nichtmehr auf, aber vielleicht hilft es dir ja trotzdem...
Code:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;


class SwingDemo extends JFrame implements ActionListener{


    public static void main(String args[])
    {
		new SwingDemo();
	}

    int a,b,c,d;
    JButton green;
    FigurePanel figurePanel = null;

  SwingDemo(){
      setSize(300,300);
      getContentPane().setLayout(new BorderLayout());
      green=new JButton("rechteck?");
      green.addActionListener(this);
      getContentPane().add(green, BorderLayout.NORTH);
      figurePanel = new FigurePanel();
      getContentPane().add(figurePanel, BorderLayout.CENTER);
	  setVisible(true);
  }


  public void actionPerformed(ActionEvent a){
      Figure x=new Quad(15,25,7,16);
      figurePanel.figure = x;
      figurePanel.repaint();
  }

}


class FigurePanel extends JPanel
{
	public Figure figure = null; // private machen!

	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		if (figure != null)
		{
			figure.paintMe(g);
		}
	}
}



abstract class Figure
{
	public Figure(int x)
	{
		// max was mit x
	}

    abstract public void paintMe(Graphics g);
}

class Quad extends Figure{

    int x,y,w,h;





        Quad(int x,int y, int w, int h){
           super(x);
           this.y=y;
           this.w=w;
           this.h=h;
        }

        public void paintMe(Graphics g)
        {
            g.drawRect(x,y,w,h);
        }


}

Wenn noch was unklar ist, einfach mal konkret nachfragen.
 
B

Bernd1983

Gast
@Marco13

thx das bsp hilft mir sehr.

ich hätte eine generelle Frage: Kann man eigentlich eine Grafik zeichnen in einer swing Komponente ohne Graphic Objekte?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J SWING UI Designer und zeichnen Java Basics - Anfänger-Themen 4
G Maven Swing: Wie verwende ich WindowListener ? Java Basics - Anfänger-Themen 2
C Threads und Swing Java Basics - Anfänger-Themen 9
A Swing: Raumshiff Java Basics - Anfänger-Themen 3
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
nbergmann Wo ist javax.swing.JOptionPane gespeichert? Java Basics - Anfänger-Themen 4
StevenGG Java swing "New Integer" Java Basics - Anfänger-Themen 5
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
O ImageIcon, Swing Java Basics - Anfänger-Themen 1
O Swing JPanel Java Basics - Anfänger-Themen 4
F Swing - Fehler - Paint Methode Java Basics - Anfänger-Themen 7
M Input/Output Java Swing: Prüft ob Text aus JTextField ausschließlich Integer enthält Java Basics - Anfänger-Themen 15
mobaer Swing Timer stoppen Java Basics - Anfänger-Themen 3
M Wie kann ich hier ein Textfeld hinzufügen Java Swing? Java Basics - Anfänger-Themen 1
M SpielMenü mit Swing Java Basics - Anfänger-Themen 3
M Wie kann ich eine Eingabe im Java-Swing übergeben? Java Basics - Anfänger-Themen 1
N javax swing JOptionPane Hilfe Java Basics - Anfänger-Themen 3
H Swing Button hat falsche Größe Java Basics - Anfänger-Themen 5
C Der Swing Layout-Manager hasst mich Java Basics - Anfänger-Themen 4
M Java swing im Browser starten Java Basics - Anfänger-Themen 0
M JavaFX in Swing-Applikationen einbetten Java Basics - Anfänger-Themen 5
Z Threads SWING mit EventQueue.invokeLater Java Basics - Anfänger-Themen 1
P JDK installieren javac behauptet Javax.swing existiert nicht Java Basics - Anfänger-Themen 8
K Ascii Converter mit Swing Java Basics - Anfänger-Themen 4
b1ck Interface Verständnisfrage zum GUI mit "swing" Java Basics - Anfänger-Themen 1
N Erste Schritte Karte in SWING Application Java Basics - Anfänger-Themen 4
D Mehrfacherfassung in Swing GUI Java Basics - Anfänger-Themen 12
D Datum aus Swing in MySQL DB speichern Java Basics - Anfänger-Themen 22
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
J Input/Output Charset Swing- Eingaben? Java Basics - Anfänger-Themen 8
S JUnit - Swing- Anwendung wird nicht neu gestartet Java Basics - Anfänger-Themen 0
Q Threads Threads in Swing Anwendungen Java Basics - Anfänger-Themen 5
B Swing intstalliert Eclips{}, mackiert Rot Java Basics - Anfänger-Themen 6
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
S Input/Output In Java Swing auf Button warten? Java Basics - Anfänger-Themen 9
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
G Performance - höhere Anzahl Swing Elemente Java Basics - Anfänger-Themen 5
B Java Swing "Zeichenfläche" Java Basics - Anfänger-Themen 1
O Alternative zum swing-Timer Java Basics - Anfänger-Themen 5
F Swing Applet: mehrere Komponenten hinzufügen Java Basics - Anfänger-Themen 1
F Platzieren von Komponenten in Swing Applet funktioniert nicht Java Basics - Anfänger-Themen 3
P Hintergrundbild in Swing einfügen Java Basics - Anfänger-Themen 3
C Swing frage Java Basics - Anfänger-Themen 8
T Rechenprogramm mit Swing Java Basics - Anfänger-Themen 3
K Swing Darstellungsproblem Java Basics - Anfänger-Themen 11
G Verständnisproblem mit swing Java Basics - Anfänger-Themen 6
P Swing - Blackscreen Java Basics - Anfänger-Themen 10
Y Random-Objekt und Swing Java Basics - Anfänger-Themen 4
M Klassen Hilfe bei SWING Java Basics - Anfänger-Themen 5
S GUI Problem: Swing Java Basics - Anfänger-Themen 8
M Javax.swing - Timer(2 Button) Java Basics - Anfänger-Themen 17
J Timer - Swing Java Basics - Anfänger-Themen 5
B Erste Schritte Primefaces -> Swing Gui Java Basics - Anfänger-Themen 7
T Swing, SWT oder JavaFX Java Basics - Anfänger-Themen 8
S Programmoberfläche mit Java-Swing - Herangehensweise Java Basics - Anfänger-Themen 20
E Fragen zu paintXXX in Swing Java Basics - Anfänger-Themen 7
D Erste Schritte bash-Befehl mit Swing ausführen Java Basics - Anfänger-Themen 8
A Alternative zum manuellen Swing programmieren?? Java Basics - Anfänger-Themen 4
S Android fuer Swing-Kenner..? Java Basics - Anfänger-Themen 6
J Swing Timer Java Basics - Anfänger-Themen 3
B Seltsamer Fehler in SWING anwendung Java Basics - Anfänger-Themen 2
D GPS Tracker Swing Java Basics - Anfänger-Themen 2
L Erste Schritte Swing oder SWT Paint mit Grafikkarte? Java Basics - Anfänger-Themen 7
B Einstieg in swing GUI Java Basics - Anfänger-Themen 7
S Swing Eingabe Erzwingen Java Basics - Anfänger-Themen 3
S Swing JTable Java Basics - Anfänger-Themen 7
Z Input/Output Programm mit Swing umsetzen Java Basics - Anfänger-Themen 6
K Eclipse wie Swing per Drag und Drop erstellen Java Basics - Anfänger-Themen 2
V Dropdown Button in einer GUI (Java Swing) Java Basics - Anfänger-Themen 12
S Swing, Gridbaglayout Panel in Panel;funzt nicht!! Java Basics - Anfänger-Themen 3
O swing komponenten werden nicht angezeigt Java Basics - Anfänger-Themen 6
S Swing, Panel über Hintergrundbild!! Java Basics - Anfänger-Themen 6
P Im Fenster bleiben (swing) Java Basics - Anfänger-Themen 16
M Einfacher Swing Wizard Java Basics - Anfänger-Themen 3
E Swing FileWrite?? Java Basics - Anfänger-Themen 3
S Umlaute in Swing-GUI Java Basics - Anfänger-Themen 8
K Drop-down Menü (swing) Java Basics - Anfänger-Themen 4
M Timer-Thread in Swing öffnet jedes Mal ein neues Fenster Java Basics - Anfänger-Themen 6
M Swing Klasse auch per Kommandozeile starten? Java Basics - Anfänger-Themen 2
S JAVA Swing Eventlistener Java Basics - Anfänger-Themen 11
P Swing - Welche Klasse für ausgeben von Ergebnissen? Java Basics - Anfänger-Themen 3
V Swing Componenten werden auf Mac nicht angezeigt Java Basics - Anfänger-Themen 19
J Überfordert mit Swing Java Basics - Anfänger-Themen 5
B Baum > Baum-Swing Java Basics - Anfänger-Themen 4
B Bei Swing weg vom North-West-South-East-Prinzip Java Basics - Anfänger-Themen 2
K Swing Fenster jede sec.neuzeichnen Java Basics - Anfänger-Themen 14
F Werteübergabe in Swing Formularen (gui Builder) Java Basics - Anfänger-Themen 9
L Swing GridBagLayout Java Basics - Anfänger-Themen 3
K Bild als Hintergrund in einem Swing Fenster Java Basics - Anfänger-Themen 21
J unterschied zwischen awt und swing Java Basics - Anfänger-Themen 6
C Swing i.V.m. Threads Java Basics - Anfänger-Themen 2
J XML Viewer for Swing Java Basics - Anfänger-Themen 6
Y Anfänger Hausaufgabe... Swing Java Basics - Anfänger-Themen 6
W Zeichnen in Swing Java Basics - Anfänger-Themen 7
B Swing Applikation mit mehreren Klassen Java Basics - Anfänger-Themen 2
C Swing, Buttons Wert zuweisen Java Basics - Anfänger-Themen 3
Luk10 Swing timer und Threads Java Basics - Anfänger-Themen 4
J Java GUI in Swing und das MVC Paradigma Java Basics - Anfänger-Themen 3
M Swing Java Basics - Anfänger-Themen 7
B Verständnisproblem zu Swing und Methoden Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben