Hallo,
Ich habe mir eine GUI zusammengebastelt (3 Buttons auf einem JFrame) und möchte nun über diese Buttons eine Linie zeichnen.
Dazu habe ich mir im openBook "Java ist auch eine Insel" die Methode paint(Graphics g) herausgesucht. Allerdings dann in Foren gelesen, das man besser die Methode paintComponent(Graphics g) überschreiben solle.
Das habe ich dann auch folgendermaßen in meinen Code eingebaut
GUI
"startup"-Klasse
starte ich nun meine startup-Klasse wird mein Frame mit den Buttons ganz normal angezeigt, jedoch wird die Linie nicht gezeichnet. Das habe ich mir erklärt, da ich ja nur den ?Konstruktor? gui aufrufe und dort halt nur die mir gezeigten Objekte erstellt werden. Also dachte ich ruf ich einfach dort die Methode paintComponent() auf.
Starte ich nun meine startup-Klasse wird wieder nur mein Frame+Komponenten gezeichnet und zusätzlich in der Dos-Box die Meldung
Auch das habe ich "gegooglet" und gelesen, dass versucht wird auf eine Objektreferenz zuzugreifen, die den Wert null besitzt. Ich denke es handelt sich hier dann um mein Graphics-Objekt g. Als Lösung stand da "mit dem new-Operator initialisieren".
Aber das geht doch nicht, oder!? Graphics ist doch abstract.
Kann mir wer Tipps geben?
Oder Hilfen wo ich nochmal drüber schauen könnte?
Ich möchte keine fertigen Lösungen, weil so verstehe ich das nicht und bin auch bei meinem Lernerfolg nicht weiter fortgeschritten. Aber ein Denkanstoß in die richtige Richtung wäre nett.
Danke & Gruß
Julian
Ich habe mir eine GUI zusammengebastelt (3 Buttons auf einem JFrame) und möchte nun über diese Buttons eine Linie zeichnen.
Dazu habe ich mir im openBook "Java ist auch eine Insel" die Methode paint(Graphics g) herausgesucht. Allerdings dann in Foren gelesen, das man besser die Methode paintComponent(Graphics g) überschreiben solle.
Das habe ich dann auch folgendermaßen in meinen Code eingebaut
GUI
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Graphics.*;
import java.util.*;
import javax.swing.JFrame.*;
public class gui extends JFrame
{
JFrame jf;
JButton start, pause, stop;
JLabel test;
Graphics bg;
public gui()
{
jf=new JFrame();
jf.setTitle("");
jf.setSize(370,500);
Container pane=jf.getContentPane();
start = new JButton("Start");
start.setSize(100, 40);
start.setLocation(10, 420);
pane.add(start);
pause = new JButton("Pause");
pause.setSize(100, 40);
pause.setLocation(130, 420);
pane.add(pause);
stop = new JButton("Stop");
stop.setSize(100, 40);
stop.setLocation(250, 420);
pane.add(stop);
JLabel trash = new JLabel();
trash.setSize(1,1);
trash.setLocation(1,1);
pane.add(trash);
jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
jf.setVisible(true);
//paintComponent(bg);
}
public void paintComponent(Graphics g)
{
super.paint(g);
g.drawLine(0,390,360,390);
}
}
"startup"-Klasse
Java:
import javax.swing.*;
public class startup
{
public static void main (String[] args)
{
JFrame frame = new gui();
}
}
starte ich nun meine startup-Klasse wird mein Frame mit den Buttons ganz normal angezeigt, jedoch wird die Linie nicht gezeichnet. Das habe ich mir erklärt, da ich ja nur den ?Konstruktor? gui aufrufe und dort halt nur die mir gezeigten Objekte erstellt werden. Also dachte ich ruf ich einfach dort die Methode paintComponent() auf.
Starte ich nun meine startup-Klasse wird wieder nur mein Frame+Komponenten gezeichnet und zusätzlich in der Dos-Box die Meldung
Exception in thread "main" java.lang.NullPointerException
at gui.paintComponent(gui.java:54)
at gui.(init)(gui.java:46)
at test.main(startup.java:7)
Auch das habe ich "gegooglet" und gelesen, dass versucht wird auf eine Objektreferenz zuzugreifen, die den Wert null besitzt. Ich denke es handelt sich hier dann um mein Graphics-Objekt g. Als Lösung stand da "mit dem new-Operator initialisieren".
Aber das geht doch nicht, oder!? Graphics ist doch abstract.
Kann mir wer Tipps geben?
Oder Hilfen wo ich nochmal drüber schauen könnte?
Ich möchte keine fertigen Lösungen, weil so verstehe ich das nicht und bin auch bei meinem Lernerfolg nicht weiter fortgeschritten. Aber ein Denkanstoß in die richtige Richtung wäre nett.
Danke & Gruß
Julian