GUIBeginner: Wert außerhalb ChangeListener

Hi zusammen,
Ich habe einen JSlider in einer GUI und möchte gerne den Wert des JSliders außerhalb des changelisteners in einer Variablen speichern!
Innerhalb geht dies ja mit zb. X=slider.getValue()
Wie bekomme ich dann "x" außerhalb ?
Hoffe ich hab das Problem verständlich erklärt :-)

Gruß

  1. Ich nehme an ein changelistener ist das Ereignis das aufgerufen wird wenn der Wert geändert wird?
    Warum solltest du slider.getValue() nur dort aufrufen können und nirgends anders?

    1. ich bekomme dann eine Fehlermeldung!
      ich möchte einfach ein Kreis mit einem Slider größer und kleiner werden lassen.
      Den Kreis möchte ich in einem JPanel zeichnen und der bekommt den Wert halt vom Slider.
      Ich habe den Kreis in einer extra Klasse gespeichert, aber wenn ich jetzt das Programm starten möchte bekomme ich eine Fehlermeldung. ein auszug von meinem Code:

        
      		final JSlider slider = new JSlider();  
      		slider.addChangeListener(new ChangeListener() {  
      		public void stateChanged(ChangeEvent arg0) {  
      				x=slider.getValue();  
      			}  
      		});  
      
      
        
      		JPanel panel = new Linien();  
      		panel.setBounds(41, 11, 200, 158);  
      		contentPane.add(panel);  
      
      

      x ist als public int x; weiter oben im Code.

      und in der anderen Klasse befindet sich dann die Graphics ()

        
      public class Linien extends JPanel  
      {  
        
          public SliderKreis sliderkreis;  
      	  
      	public void paintComponent(Graphics g)  
      	{  
      		super.paintComponent(g);  
      		g.fillOval(10, 10, sliderkreis.x, sliderkreis.x);  
      
      

      Weiß jemand warum er mir dann hier den Fehler bringt? Ist es nicht möglich durch diese Art den Kreis zu vergrößern?

      1. ich bekomme dann eine Fehlermeldung!

        Verrate die uns blos nicht und sag auch bitte nicht wo die auftritt. Sonst macht das Raten gar keinen Spaß mehr ;-)

        1. sorry mein Fehler!
          also ich klick auf Run, dann öffnet sich das Fenster (das leider leer bleibt) und dann bekomm ich direkt einen Haufen Meldungen:

          Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
          at Linien.paintComponent(Linien.java:25)
          at javax.swing.JComponent.paint(Unknown Source)
          at javax.swing.JComponent.paintChildren(Unknown Source)
          at javax.swing.JComponent.paint(Unknown Source)
          at javax.swing.JComponent.paintChildren(Unknown Source)
          at javax.swing.JComponent.paint(Unknown Source)
          at javax.swing.JLayeredPane.paint(Unknown Source)
          at javax.swing.JComponent.paintChildren(Unknown Source)
          at javax.swing.JComponent.paintToOffscreen(Unknown Source)
          at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
          at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
          at javax.swing.RepaintManager.paint(Unknown Source)
          at javax.swing.JComponent.paint(Unknown Source)
          at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
          at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
          at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
          at java.awt.Container.paint(Unknown Source)
          at java.awt.Window.paint(Unknown Source)
          at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
          at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
          at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
          at javax.swing.RepaintManager.access$700(Unknown Source)
          at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
          at java.awt.event.InvocationEvent.dispatch(Unknown Source)
          at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
          at java.awt.EventQueue.access$200(Unknown Source)
          at java.awt.EventQueue$3.run(Unknown Source)
          at java.awt.EventQueue$3.run(Unknown Source)
          at java.security.AccessController.doPrivileged(Native Method)
          at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
          at java.awt.EventQueue.dispatchEvent(Unknown Source)
          at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
          at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
          at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
          at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
          at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
          at java.awt.EventDispatchThread.run(Unknown Source)
          Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
          at Linien.paintComponent(Linien.java:25)
          at javax.swing.JComponent.paint(Unknown Source)
          at javax.swing.JComponent.paintChildren(Unknown Source)
          at javax.swing.JComponent.paint(Unknown Source)
          at javax.swing.JComponent.paintChildren(Unknown Source)
          at javax.swing.JComponent.paint(Unknown Source)
          at javax.swing.JLayeredPane.paint(Unknown Source)
          at javax.swing.JComponent.paintChildren(Unknown Source)
          at javax.swing.JComponent.paintToOffscreen(Unknown Source)
          at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(Unknown Source)
          at javax.swing.RepaintManager$PaintManager.paint(Unknown Source)
          at javax.swing.RepaintManager.paint(Unknown Source)
          at javax.swing.JComponent.paint(Unknown Source)
          at java.awt.GraphicsCallback$PaintCallback.run(Unknown Source)
          at sun.awt.SunGraphicsCallback.runOneComponent(Unknown Source)
          at sun.awt.SunGraphicsCallback.runComponents(Unknown Source)
          at java.awt.Container.paint(Unknown Source)
          at java.awt.Window.paint(Unknown Source)
          at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
          at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
          at javax.swing.RepaintManager.prePaintDirtyRegions(Unknown Source)
          at javax.swing.RepaintManager.access$700(Unknown Source)
          at javax.swing.RepaintManager$ProcessingRunnable.run(Unknown Source)
          at java.awt.event.InvocationEvent.dispatch(Unknown Source)
          at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
          at java.awt.EventQueue.access$200(Unknown Source)
          at java.awt.EventQueue$3.run(Unknown Source)
          at java.awt.EventQueue$3.run(Unknown Source)
          at java.security.AccessController.doPrivileged(Native Method)
          at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
          at java.awt.EventQueue.dispatchEvent(Unknown Source)
          at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
          at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
          at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
          at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
          at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
          at java.awt.EventDispatchThread.run(Unknown Source)

          Line 25 ist diese hier:

            
          		g.fillOval(10, 150, sliderklasse.x, sliderklasse.x);  
          
          
          1. Dann musst du rausfinden was in dieser Zeile null ist und zu dieser Meldung führt.
            Das kann hier aber keiner für dich tun.
            In diesen Meldungen kommt übrigens nirgends die getValue Methode vor, die du im ersten Beitrag erwähnt hast.

      2. Hi,

        [code lang=javascript]

        Java != Javascript ...

        public class Linien extends JPanel
        {
            public SliderKreis sliderkreis;

        wird da irgendwo auch eine Instanz von SliderKreis zugewiesen?

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
        1. Om nah hoo pez nyeetz, MudGuard!

          Java != Javascript ...

          Die Forumssoftware gibt ja [link:http://forum.de.selfhtml.org/hilfe/bedienung.htm#syntax-highlighting@title=noch weitere Codes] her, allerdings muss man das wissen. Die Tatsache, dass nicht alle Buttons bekommen haben, war sicher das Ergebnis einer längeren Diskussion. Sollte man die fehlenden 5 (Java, Python, Ruby, Pascal, C) hinzufügen? Einen Button für Latex kann es auch geben, auf Pascal ließe sich wohl verzichten. Man könnte sie etwas strukturieren:

          [code]Link Bild Formel   HTML CSS JavaScript   PHP Perl

          Java Python Ruby C Pascal   XML SQL   Apache

            
          Wie ist die Meinung dazu?  
            
          Matthias
          
          -- 
          1/z ist kein Blatt Papier.  
          ![](http://www.billiger-im-urlaub.de/kreis_sw.gif)  
          
          
          1. Hallo,

            Die Forumssoftware gibt ja noch weitere Codes her, allerdings muss man das wissen. Die Tatsache, dass nicht alle Buttons bekommen haben, war sicher das Ergebnis einer längeren Diskussion.

            oder einer spontanen Auswahl, die bisher niemand kritisiert hat. ;-)
            Man müsste mal schauen, welche häufig oder eben sehr selten verwendet werden. HTML, CSS, JS/Javascript, PHP, Perl und SQL sind wahrscheinlich die Favoriten[1]; Java, Python, Ruby und Pascal sehe ich sehr selten; Apache, XML und C würde ich irgendwo im Mittelfeld vermuten.

            Wie ist die Meinung dazu?

            Ich finde, dass man vor allem die Kurzform "js" alternativ zur ausgeschriebenen Form "javascript" auch zulassen sollte, weil das Kürzel JS doch üblich und sehr verbreitet ist. Wie oft hab ich nicht schon [code lang=js] geschrieben und mich dann über die Meldung gewundert, ich hätte eine nicht unterstützte Sprache angegeben ...

            Die Buttons sind mir persönlich egal, da ich sie sowieso weder nutze noch überhaupt sehe.

            Ciao,
             Martin

            [1] auch wenn mangels Durchblick oft PHP anstatt SQL gewählt wird

            --
            Wer schläft, sündigt nicht.
            Wer vorher sündigt, schläft besser.
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
            1. Om nah hoo pez nyeetz, Der Martin!

              Ich finde, dass man vor allem die Kurzform "js" alternativ zur ausgeschriebenen Form "javascript" auch zulassen sollte

              In diesem Forum wohl nicht mehr. Aber für das neue sollte das umgesetzt werden.

              Matthias

              --
              1/z ist kein Blatt Papier.

          2. Om nah hoo pez nyeetz, Matthias Apsel!

            Link Bild Formel   HTML CSS JavaScript   PHP Perl

            Java Python Ruby C Pascal   XML SQL   Apache

              
            Ich habe es für die Devel-Ansicht gebaut  
              
            ![Codebuttons](http://selfhtml.apsel-mv.de/test/Codebuttons.png)  
              
            und bitte um Meinungen.  
              
            Matthias
            
            -- 
            1/z ist kein Blatt Papier.  
            ![](http://www.billiger-im-urlaub.de/kreis_sw.gif)  
            
            
            1. Hey Matthias,

              Ich habe es für die Devel-Ansicht gebaut

              Codebuttons

              und bitte um Meinungen.

              also zuerst nochmal ein großes Kompliment an alle, die sich hier engagieren. Ist wirklich top, was Ihr hier so alles macht!

              Zu der Anordnung: Ich persönlich finde, dass in der neuen Anordnung "Java, Phython, [...]" im Gegensatz zu z.B. "PHP, Perl" zu prominent angeordnet ist. Zumindestens ist mir das direkt ins Auge gesprungen und ich hab gedacht: Und was ist mit PHP? Bis mir aufgefallen ist, dass das oben rechts steht. Könnte man nicht evtl. die "Wichtigen" Buttons, also die, die jetzt drin sind, einfach so lassen wie sie sind und nach "Apache" z.B. einfach einen Link "mehr Optionen" oder so ähnlich einfügen. Dann kann man nach einem Klick auf den Link, Button, was-auch-immer die zweite Zeile mit den "eher Unwichtigen" einblenden.

              Gruß, Dennis

              1. Om nah hoo pez nyeetz, Der-Dennis!

                siehe https://forum.selfhtml.org/?t=213216&m=1457500

                Matthias

                --
                1/z ist kein Blatt Papier.

        2. Hi,

          [code lang=javascript]

          Java != Javascript ...

          public class Linien extends JPanel
          {
              public SliderKreis sliderkreis;

          wird da irgendwo auch eine Instanz von SliderKreis zugewiesen?

          cu,
          Andreas

          Hallo,
          Ich weiß das js=!java ist aber da ist kein Button gewesen und wollt es aber als Code anzeigen.
          Wie meinst du das? Bin blutiger Anfänger :-/
          Ich habe nur das gemacht wie ich es auch hier reinkopiert habe. Oder meinst du in der sliderkreis klasse?
          Ich bekomm halt die nullpointerexception, weiß aber nicht warum. In der Fehlermeldung wird immer auf die Zeile des changelisteners verwiesen (slider.getValue)

          Gruß
          GUIBeginner

          1. Hi,

            public class Linien extends JPanel
            {
                public SliderKreis sliderkreis;

            wird da irgendwo auch eine Instanz von SliderKreis zugewiesen?

            Ich habe nur das gemacht wie ich es auch hier reinkopiert habe. Oder meinst du in der sliderkreis klasse?
            Ich bekomm halt die nullpointerexception, weiß aber nicht warum.

            Naja, Du deklarierst eine Variable vom Typ SliderKreis. Da diese nicht initialisiert wird (es wird kein Wert zugewiesen), ist sie null.

            Und wenn Du dann in
            g.fillOval(10, 10, sliderkreis.x, sliderkreis.x);

            versuchst, auf sliderkreis.x zuzugreifen, kann das nicht funktionieren, da sliderkreis ja null ist.

            (Btw, steht da absichtlich zweimal sliderkreis.x?)

            Nur weil Du irgendwo ein new SliderKreis() (oder ähnliches) aufrufst, wird noch lange nicht irgendwoanders eine Variable namens sliderkreis mit der Referenz auf diese SliderKreis-Instanz gefüllt ...

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            O o ostern ...
            Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
            1. Hi,

              public class Linien extends JPanel
              {
                  public SliderKreis sliderkreis;

              wird da irgendwo auch eine Instanz von SliderKreis zugewiesen?

              Ich habe nur das gemacht wie ich es auch hier reinkopiert habe. Oder meinst du in der sliderkreis klasse?
              Ich bekomm halt die nullpointerexception, weiß aber nicht warum.

              Naja, Du deklarierst eine Variable vom Typ SliderKreis. Da diese nicht initialisiert wird (es wird kein Wert zugewiesen), ist sie null.

              Und wenn Du dann in
              g.fillOval(10, 10, sliderkreis.x, sliderkreis.x);

              versuchst, auf sliderkreis.x zuzugreifen, kann das nicht funktionieren, da sliderkreis ja null ist.

              (Btw, steht da absichtlich zweimal sliderkreis.x?)

              Nur weil Du irgendwo ein new SliderKreis() (oder ähnliches) aufrufst, wird noch lange nicht irgendwoanders eine Variable namens sliderkreis mit der Referenz auf diese SliderKreis-Instanz gefüllt ...

              cu,
              Andreas

              ah ok!
              nee ich hab das nur so gemacht bis jetzt. x ist in der sliderkreis-klasse im change listener "x=slider.getValue()". Aber mehr habe ich nicht gemacht. Also ist sie deswegen dann immer null :-/ ?
              Wie bekomm ich diese denn initialisiert? Kannst du mir da eine Hilfe geben?
              Vielen Dank! Hab auf jeden schonmal etwas dazu gelernt!!
              Gruß
              GUIBeginner

              1. Hi,

                public class Linien extends JPanel
                {
                    public SliderKreis sliderkreis;

                wird da irgendwo auch eine Instanz von SliderKreis zugewiesen?

                Ich habe nur das gemacht wie ich es auch hier reinkopiert habe. Oder meinst du in der sliderkreis klasse?
                Ich bekomm halt die nullpointerexception, weiß aber nicht warum.

                Naja, Du deklarierst eine Variable vom Typ SliderKreis. Da diese nicht initialisiert wird (es wird kein Wert zugewiesen), ist sie null.

                Und wenn Du dann in
                g.fillOval(10, 10, sliderkreis.x, sliderkreis.x);

                versuchst, auf sliderkreis.x zuzugreifen, kann das nicht funktionieren, da sliderkreis ja null ist.

                (Btw, steht da absichtlich zweimal sliderkreis.x?)

                Nur weil Du irgendwo ein new SliderKreis() (oder ähnliches) aufrufst, wird noch lange nicht irgendwoanders eine Variable namens sliderkreis mit der Referenz auf diese SliderKreis-Instanz gefüllt ...

                cu,
                Andreas

                ah ok!
                nee ich hab das nur so gemacht bis jetzt. x ist in der sliderkreis-klasse im change listener "x=slider.getValue()". Aber mehr habe ich nicht gemacht. Also ist sie deswegen dann immer null :-/ ?
                Wie bekomm ich diese denn initialisiert? Kannst du mir da eine Hilfe geben?
                Vielen Dank! Hab auf jeden schonmal etwas dazu gelernt!!
                Gruß
                GUIBeginner

                Hallo nochmal,
                ja es steht zweimal "sliderkreis.x" , da ich ja das Oval in x und y gleichmäßig vergrößern möchte. Ich versteh das nicht ganz mit dem initialisieren.
                Wahrscheinlich versteh ich das alles nicht so richtig :-(. Ich versuch vielleicht nochmal das Problem zu schildern falls ich es falsch erklärt habe.

                Also ich habe mit einem GUI-Builder eine GUI erstellt. In der GUI habe ich ein JPanel und ein JSlider. Das JPanel habe ich dann mit der Linien.java Klasse "verbunden".
                Also -> JPanel panel = new Linien(); .
                Wenn ich jetzt in der Linienklasse das Oval zeichnen lasse zb: "drawOval(10,10,100,100);" dann zeichnet er auch das Oval im JPanel. Soweit so gut.
                Jetzt sage ich im Changelistener -> " x = slider.getValue();"

                Wie kann ich jetzt in Linien.java statt der "drawOval(10,10,100,100) den x Wert einsetzen damit sich die größe des Kreises mit dem Slider verstellt - also "drawOval(10,10,x,x) ??

                Vielen Dank für eure Hilfe!!!

                1. Wie bekomm ich diese denn initialisiert? Kannst du mir da eine Hilfe geben?
                  Vielen Dank! Hab auf jeden schonmal etwas dazu gelernt!!

                  Ich vermute mal, du solltest das "GUI" aus deinem Namen streichen, wie mir scheint, bist du dabei die Grundlagen zu erlernen. GUI ist allerdings schon ein sehr komplexes Thema.

                  Wenn du in Java sinnvoll schreiben willst, musst du dich mit OOP (= objektorientierte Programmierung) auskennen, weil Java komplett darauf aufbaut.
                  Sprich, lern die Grundlagen und geh dann zum grafischen Teil (GUI, Zeichnen auf der Oberfläche, etc) über.

                  Zum eigentlichen Problem kannst du z.B. hier hier nachlesen wie es gemacht wird (und vieles mehr).

                  MfG
                  bubble

                  --
                  If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
                  1. Wenn du in Java sinnvoll schreiben willst, musst du dich mit OOP (= objektorientierte Programmierung) auskennen, weil Java komplett darauf aufbaut.
                    Sprich, lern die Grundlagen und geh dann zum grafischen Teil (GUI, Zeichnen auf der Oberfläche, etc) über.

                    Sag das mal meinem Lehrer :-)
                    Ja ich werd mal nachschauen!
                    Gruß

                    1. Hallo bubble,
                      habe mal alles durchgelesen. Ich habe das Beispiel mit dem Spiel mal auf mein Programm übernommen. Player wäre bei mir die Klasse mit dem fillOval (Linien.java). In dieser Klasse habe ich die Variable x (int x;) erstellt und dann die Zeichnung.
                      Playground wäre ja dann die Klasse mit der automatisch erstellten GUI. In dieser habe ich ja auch dann das JPanel drinne. Bei mir dann -> JPanel panel = new Linien();
                      Im Beispiel wird das ja mit dem Item und Namen beschrieben (p.name). Bei mir wäre das ja dann x.panel. Das wird bei mir aber als Fehler angezeigt. Erstelle ich aber bei mir noch (public Linien Linien;) bekomme ich bei x.linien = slider.getValue(); im Changelisteners des Sliders keine Fehlermeldung. Bei Programmstart bekomme ich aber direkt eine NullPointerException Fehlermeldung bei genau dieser Zeile. Warum ist der Wert null?

                      Ich kann mich echt nur entschuldigen, aber mein Lehrer gibt leider so Aufgaben auf ohne uns Hilfestellungen zu geben. :-(

                      Finde es aber super das ich hier ein bisschen Hilfe bekomme! :-)

                      1. Im Beispiel wird das ja mit dem Item und Namen beschrieben (p.name). Bei mir wäre das ja dann x.panel. Das wird bei mir aber als Fehler angezeigt. Erstelle ich aber bei mir noch (public Linien Linien;) bekomme ich bei x.linien = slider.getValue(); im Changelisteners des Sliders keine Fehlermeldung. Bei Programmstart bekomme ich aber direkt eine NullPointerException Fehlermeldung bei genau dieser Zeile. Warum ist der Wert null?

                        public Linien Linien
                        ?

                        Das muss ja meckern, schon weil du Linien redeklarierst. Spontan kann ich aber dazu nichts weiter sagen, ohne Code zu sehen.
                        Poste einfach mal die relevanten Stellen.

                        Ich kann mich echt nur entschuldigen, aber mein Lehrer gibt leider so Aufgaben auf ohne uns Hilfestellungen zu geben. :-(

                        Die Lehrmethode deines Lehrer scheint mir total beschi... schlecht. (Erinnert mich an meinen Info-Lehrer >.<)

                        MfG
                        bubble

                        --
                        If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
                        1. Poste einfach mal die relevanten Stellen.

                          Hatte ich schonmal vorher gepostet. Hier sind ein paar Stellen, ich hoffe das sind alle wichtigen:

                          final JSlider slider = new JSlider();
                                          slider.addChangeListener(new ChangeListener() {
                                          public void stateChanged(ChangeEvent arg0) {
                                                          grafik.d=slider.getValue();  // hier bringt er die NullPointerexception
                                                  }
                                          });

                          JPanel panel = new Linien();
                                          panel.setBounds(41, 11, 200, 158);
                                          contentPane.add(panel);

                          Ganz oben steht dann noch "public Linien grafik" - Habe es im letzten Post falsch geschrieben. Habe es nicht "public Linien Linien" sondern "public Linien grafik" genannt.

                          Und hier die Linien.java:

                          public class Linien extends JPanel
                          {

                          public SliderKreis sliderkreis;

                          public int d;

                          public void paintComponent(Graphics g)
                                  {
                                          super.paintComponent(g);
                                          g.fillOval(10, 10, d, d);

                          Die Lehrmethode deines Lehrer scheint mir total beschi... schlecht. (Erinnert mich an meinen > Info-Lehrer >.<)

                          Vielleicht hatten wir den selben :-D Im Unterricht haben wir noch nie mehrere Klasse erstellt und hier in der Aufgabe muss ich das jetzt machen.

                          Gruß

                          1. Poste einfach mal die relevanten Stellen.
                            Hatte ich schonmal vorher gepostet. Hier sind ein paar Stellen, ich hoffe das sind alle wichtigen:

                            Nun ja, da hätte sich ja noch was ändern können.

                            final JSlider slider = new JSlider();
                                            slider.addChangeListener(new ChangeListener() {
                                            public void stateChanged(ChangeEvent arg0) {
                                                            grafik.d=slider.getValue();  // hier bringt er die NullPointerexception
                                                    }
                                            });

                            Also ist entweder grafik oder slider nicht initialisiert worden. slider ist es schon mal wegen final JSlider slider = new JSlider(); Also ist es vermutlich grafik.

                            Ich bin mir nicht 100%ig sicher ob slider überhaupt sichtbar für den ChangeListener ist. Ich würde für die Zuweisung grafik.d = ((JSlider)arg0.getSource()).getValue(); verwenden.

                            Dazu eine kleine Erklärung: ChangeEvent wird mit Daten gefüttert, was passiert ist. Unter anderem beinhaltet es eine Funktion namens getSource mit dem Rückgabetyp Object. Diese Rückgabe spiegelt das Objekt wider, bei welchem das Event gefeuert wurde, in deinem Fall kann es sich auschließlich um slider vom Typ JSlider sein, weil nur dieses am ChangeListener registriert wurde. Dadurch kann man so tun als ob arg0.getSource() einen JSlider zurück gibt: (JSlider)arg0.getSource(), und von jenem dann getValue() aufrufen.

                            (Die Event-Objekte werden für dich noch sehr interessant, wenn du mehrere Objekte (z.B. JButtons) mit einem EventListener abspeisen willst.)

                            Ganz oben steht dann noch "public Linien grafik" - Habe es im letzten Post falsch geschrieben. Habe es nicht "public Linien Linien" sondern "public Linien grafik" genannt.

                            So wie das formuliert ist, klingt es nach meiner Vermutung.

                            Die Lehrmethode deines Lehrer scheint mir total beschi... schlecht. (Erinnert mich an meinen > Info-Lehrer >.<)
                            Vielleicht hatten wir den selben :-D Im Unterricht haben wir noch nie mehrere Klasse erstellt und hier in der Aufgabe muss ich das jetzt machen.

                            Vermutlich nicht. Java war für meinen nur eine Insel >.<

                            MfG
                            bubble

                            --
                            If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
                            1. Hallo bubble, habe mal versucht das was du vorgeschlagen hast umzusetzen. Leider immer noch kein Erfolg.
                              Hier die Klasse die automatisch erstellt wurde

                                
                              public class GUI extends JFrame {  
                                
                              	int x;  
                              	public JPanel contentPane;  
                              	public Linien grafik;  
                              	/**  
                              	 * Launch the application.  
                              	 */  
                              	public static void main(String[] args) {  
                              		EventQueue.invokeLater(new Runnable() {  
                              			public void run() {  
                              				try {  
                              					GUI frame = new GUI();  
                              					frame.setVisible(true);  
                              				} catch (Exception e) {  
                              					e.printStackTrace();  
                              				}  
                              			}  
                              		});  
                              	}  
                                
                              	/**  
                              	 * Create the frame.  
                              	 */  
                                
                              	public GUI() {  
                              		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
                              		setBounds(100, 100, 450, 300);  
                              		contentPane = new JPanel();  
                              		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));  
                              		setContentPane(contentPane);  
                              		contentPane.setLayout(null);  
                              		  
                              		final JPanel panel = new  Grafik();  
                              		panel.setBounds(77, 34, 137, 140);  
                              		contentPane.add(panel);  
                              		  
                              		final JSlider slider = new JSlider();  
                              		slider.addChangeListener(new ChangeListener() {  
                              			public void stateChanged(ChangeEvent arg0) {  
                              				grafik.d= ((JSlider)arg0.getSource()).getValue();  
                              			}  
                              		});  
                              		slider.setMajorTickSpacing(100);  
                              		slider.setValue(10);  
                              		slider.setPaintLabels(true);  
                              		slider.setBounds(125, 196, 200, 37);  
                              		contentPane.add(slider);  
                              	}  
                              }  
                              
                              

                              und hier die Linien.java:

                                
                              public class Linien extends JPanel  
                              {  
                              	public int d=10;  
                              	  
                              	public void paintComponent(Graphics g)  
                              	{  
                              		super.paintComponent(g);  
                              		g.fillOval(10, 10, d, d);  
                              	}  
                                
                              
                              

                              Habe mal alles als Final initialisiert.
                              Leider immer noch die NullPointerException bei grafik.d=....

                              1. Habe ein bisschen "rumgespielt"... Es scheint so als ob er Probleme hat mit den Werten in die andere Klasse zu geben.
                                Wenn ich den Changelistener leer lasse und ganz unten ins Programm
                                "System.out.println(grafik.d);" schreibe bringt er auch NullPointerException -> bei dieser und bei Zeile 26 -> "GUI frame = new GUI();"
                                Hat das auch mit dem "final" initialiseren zu tun?

                                Vielen Dank für deine Hilfe!!

                              2. Hallo bubble, habe mal versucht das was du vorgeschlagen hast umzusetzen. Leider immer noch kein Erfolg.
                                Hier die Klasse die automatisch erstellt wurde

                                public class GUI extends JFrame {

                                int x;
                                public JPanel contentPane;
                                public Linien grafik;

                                Hier deklarierst du die Variable grafik vom Typ Linien als Member von GUI. Mehr nicht! Klein Initialisierung.  
                                
                                > ~~~java
                                
                                	public GUI() {  
                                
                                > 		/* .... */  
                                > 		final JPanel panel = new  Grafik();  
                                > 		panel.setBounds(77, 34, 137, 140);  
                                > 		contentPane.add(panel);  
                                > 
                                
                                

                                Hier deklariest du eine _lokale_ Variable namens panel vom Typ JPanel und erzeugst eine Instanz der Klasse Grafik (vermutlich eine Ableitung von JPanel) UND weist panel diese Instanz zu. Sprich, du initialisierst panel.
                                Da panel final deklariert wurde, kann ihr kein anderer Wert mehr zugewiesen werden, so lange die Variable, die die Referenz auf die Grafik-Instanz beinhaltet. Dadurch, dass dies aber eine lokale Variable ist, geht sie sowieso, nach dem die Funktion verlassen wurde verloren.

                                Und genau da wird dein Problem liegen, der Member 'grafik' ist immer noch nicht initialisiert.

                                Habe mal alles als Final initialisiert.

                                Wenn man die Tür in der Wand vergessen hat, hilft es einem auch nicht zu sagen, dass man sie nur einmal öffnen kann.

                                Leider immer noch die NullPointerException bei grafik.d=....

                                Dann initialisier grafik.

                                Hier mal ein Beispiel:

                                class Test {  
                                	public Line myline;  
                                	public Line anotherLine;  
                                  
                                	public Test() {  
                                		/* Fall 1 */  
                                		myline = new Line(1);  
                                		/* Fall 2 */  
                                		Line anotherLine = new Line(2);  
                                		/* Fall 3*/  
                                		this.anotherLine = new Line(3);  
                                		/* Fall 4*/  
                                		Line thirdLine = new Line(4);  
                                		/* Fall 5*/  
                                		fourthLine = new Line(4);  
                                	}  
                                }
                                

                                Die Reihenfolge für Variablen ist lokale -> Member.

                                Fall 1: myline gibt es nicht als lokale Variable, aber als Member, also wird Test.myline beschrieben.
                                Fall 2: Deklaration von anotherLine als lokale Variable, gibt es aber auch als Member, durch die Reihenfolge, wird aber die lokale anotherLine beschrieben, Test.anotherLine bleibt uninitialisiert.
                                Fall 3: this stellt das Objekt vom Typ Test dar, somit wird der Member Test.anotherLine direkt angesprochen und beschrieben.
                                Fall 4: thirdLine wird lokal deklariert, es gibt keinen Member, die lokale Variable thirdLine wird beschrieben.
                                Fall 5: fourthLine existiert weder lokal, noch als Member. Abbruch wegen unbekanntem Bezeichner 'fourthLine'

                                Ich hoffe das hilft dir.

                                MfG
                                bubble

                                --
                                If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
                                1. Hi bubble!

                                  Ich bekomme keine Fehlermeldung mehr!
                                  Doch größer und kleiner Wird der Kreis leider nicht :-(

                                  Habe dein Beispiel angeschaut (vielen Dank dafür!) und dann noch zu meinem Programm

                                  grafik = new Grafik();
                                  hinzugefügt.
                                  Danach habe ich keine Fehlermeldung mehr erhalten!
                                  Stimmt das so?

                                  Der Kreis wird leider immer noch nicht größer und kleiner. Wenn ich im Changelistener nun unter grafik.d= ....; noch System.out.println(grafik.d); hinzufüge bekomme ich im Meldefenster immer den richtigen Wert angezeigt! Das müsste dann wohl passen!
                                  Brauche ich in der Zeichenklasse noch etwas damit er mir immer die Zeichnung "aktualisiert" mit dem neuen Wert?

                                  Gruß und vielen vielen Dank für deine Hilfe :-)

                                  1. Ich bekomme keine Fehlermeldung mehr!

                                    Das klingt doch schon mal gut.

                                    Der Kreis wird leider immer noch nicht größer und kleiner. Wenn ich im Changelistener nun unter grafik.d= ....; noch System.out.println(grafik.d); hinzufüge bekomme ich im Meldefenster immer den richtigen Wert angezeigt! Das müsste dann wohl passen!
                                    Brauche ich in der Zeichenklasse noch etwas damit er mir immer die Zeichnung "aktualisiert" mit dem neuen Wert?

                                    Nun ja, welcher Wert kommten in deiner paint() an? Vergleich den mal mit dem Wert der vom ChangeListener ausgegeben wird.

                                    Ich hab Java eigentlich noch nie zum Zeichnen benutzt (außer gleich mit OpenGL). Aber mal ins Blaue geraten musst du eventuell nach der Zuweisung von grafik.d noch die repaint() von deiner Zeichenfläche aufrufen.

                                    MfG
                                    bubble

                                    --
                                    If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
                                    1. Hi bubble,

                                      Nun ja, welcher Wert kommten in deiner paint() an? Vergleich den mal mit dem Wert der vom ChangeListener ausgegeben wird.

                                      Wie soll ich den am besten Vergleichen? Mit System.out.... ?

                                      Ich hab Java eigentlich noch nie zum Zeichnen benutzt (außer gleich mit OpenGL). Aber mal ins Blaue geraten musst du eventuell nach der Zuweisung von grafik.d noch die repaint() von deiner Zeichenfläche aufrufen.

                                      Repaint(); habe ich schon an ein paar stellen versucht. Wusste nicht genau wo ich repaint() hinschreiben soll. Bis jetzt noch ohne Erfolg!

                                      Gruß!

                                      1. Nun ja, welcher Wert kommten in deiner paint() an? Vergleich den mal mit dem Wert der vom ChangeListener ausgegeben wird.
                                        Wie soll ich den am besten Vergleichen? Mit System.out.... ?

                                        Ja.

                                        Repaint(); habe ich schon an ein paar stellen versucht. Wusste nicht genau wo ich repaint() hinschreiben soll. Bis jetzt noch ohne Erfolg!

                                        Nicht einfach irgendeine repaint() aufrufen. Sondern die, von der Linien-Instanz.

                                        	public void stateChanged(ChangeEvent arg0) {  
                                        			grafik.d = ((JSlider)arg0.getSource()).getValue();  
                                        			obj.repaint();  
                                        	}
                                        

                                        (obj ist hierbei die Referenz zur Linien-Instanz)

                                        MfG
                                        bubble

                                        --
                                        If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
                                        1. (obj ist hierbei die Referenz zur Linien-Instanz)

                                          Also grafik.repaint();

                                          Hab beide Werte verglichen. d in Linien() ist 0 und grafik.d ist 10 als Startwert!
                                          Sobald ich den Slider bewege zeigt er ja nur noch den grafik.d Wert. Aber der Startwert stimmt schonmal nicht überein!
                                          Dann ist ja wahrscheinlich da noch das Problem das er den Wert nicht an d übergibt oder?

                                          Gruß

                                          1. Hab beide Werte verglichen. d in Linien() ist 0 und grafik.d ist 10 als Startwert!
                                            Sobald ich den Slider bewege zeigt er ja nur noch den grafik.d Wert. Aber der Startwert stimmt schonmal nicht überein!
                                            Dann ist ja wahrscheinlich da noch das Problem das er den Wert nicht an d übergibt oder?

                                            Hm, ich bekomm die Code-Fetzen und die Änderungen nicht mehr zusammengefrickelt.
                                            Also zeig mal bitte noch mal den aktuellen, relevanten Code.

                                            Will heißen, die Member-Deklarationen, deren Initialisierungen, Change-Event, Zeichnen, etc. Oder gleich die komplette GUI.java und Linien.java

                                            MfG
                                            bubble

                                            --
                                            If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
                                            1. Hier ist mein jetziger Code!
                                              Vielen Dank ! :-)

                                                
                                              public class GUI extends JFrame {  
                                                
                                              	public JPanel contentPane;  
                                              	private Linien grafik;  
                                              	/**  
                                              	 * Launch the application.  
                                              	 */  
                                              	public static void main(String[] args) {  
                                              		EventQueue.invokeLater(new Runnable() {  
                                              			public void run() {  
                                              				try {  
                                              					GUI frame = new GUI();  
                                              					frame.setVisible(true);  
                                              				} catch (Exception e) {  
                                              					e.printStackTrace();  
                                              				}  
                                              			}  
                                              		});  
                                              	}  
                                                
                                              	/**  
                                              	 * Create the frame.  
                                              	 */  
                                              	public GUI() {  
                                              		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
                                              		setBounds(100, 100, 450, 300);  
                                              		contentPane = new JPanel();  
                                              		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));  
                                              		setContentPane(contentPane);  
                                              		contentPane.setLayout(null);  
                                              		  
                                              		final JSlider slider = new JSlider();  
                                              		slider.addChangeListener(new ChangeListener() {  
                                              			public void stateChanged(ChangeEvent arg0) {  
                                              				grafik.d=((JSlider)arg0.getSource()).getValue();  
                                              				System.out.println(grafik.d);  
                                              				grafik.repaint();  
                                              					  
                                              			}  
                                              		});  
                                              		  
                                              		  
                                              		grafik = new Linien();  
                                              		JPanel panel = new Linien();  
                                              		panel.setBounds(77, 34, 137, 140);  
                                              		contentPane.add(panel);  
                                              		panel.setBackground(Color.ORANGE);  
                                                
                                              		slider.setMajorTickSpacing(100);  
                                              		slider.setValue(10);  
                                              		slider.setPaintLabels(true);  
                                              		slider.setBounds(125, 196, 200, 37);  
                                              		contentPane.add(slider);  
                                              		  
                                              		}  
                                              }  
                                                
                                              
                                              

                                              und hier die Linien.java

                                                
                                              public class Linien extends JPanel  
                                              {  
                                              	public int d;  
                                              	  
                                              	public Linien()  
                                              	{  
                                              		System.out.println("Lininen-d-Wert: "+d);  
                                              	  
                                              	}  
                                              	 public void paintComponent(Graphics g){  
                                              		super.paintComponent(g);  
                                              		g.fillOval(10,10,d ,d);  
                                                              repaint();  
                                              	}  
                                              }  
                                                
                                              
                                              
                                              1. Vielen Dank ! :-)

                                                Für mich rechts, wenn ich am Ende, wenns läuft ein Danke kommt ;)

                                                public GUI() {
                                                grafik = new Linien();
                                                JPanel panel = new Linien();
                                                panel.setBounds(77, 34, 137, 140);
                                                contentPane.add(panel);
                                                panel.setBackground(Color.ORANGE);
                                                }

                                                  
                                                Da ist dein Problem. Du erzeugst 2 Linien-Instanzen, 'grafik' und 'panel'. Dann stellst du an 'panel' Daten ein und hängst es in den Komponenten-Baum. Mit 'grafik' machst du an sonsten nichts. D.h. das gammelt einfach so im Speicher rum.  
                                                  
                                                Okay im Change-Event änderst du noch den d-Wert von 'grafik'.  
                                                  
                                                
                                                > ~~~java
                                                  
                                                
                                                > public class Linien extends JPanel  
                                                > {  
                                                > 	public int d;  
                                                > 	  
                                                > 	public Linien()  
                                                > 	{  
                                                > 		System.out.println("Lininen-d-Wert: "+d);  
                                                > 	  
                                                > 	}  
                                                > 	 public void paintComponent(Graphics g){  
                                                > 		super.paintComponent(g);  
                                                > 		g.fillOval(10,10,d ,d);  
                                                >                 repaint();  
                                                > 	}  
                                                > }  
                                                > 
                                                
                                                

                                                Okay, du gibst d einmal bei der Erzeugung der Instanz aus, das heißt dein System.out.println wird niemals den Wert anzeigen, den die Instanz hat, wenn du den Slider bewegst.
                                                Wäre die Ausgabe in paint() würdest du sehen, das sich 'd' niemals ändert.

                                                Das ist auch ganz logisch. Warum?
                                                paint() wird nur für Komponenten aufgerufen, die auch im Komponenten-Baum eingehängt und somit sichtbar sind.
                                                Noch mal kurz hoch scrollen. 'panel' ist eingehängt und somit sichtbar, 'grafik' nicht.

                                                Folglich solltest du in deinem GUI-Konstruktor einfach 'panel' weder erzeugen, noch deklarieren, sondern direkt mit 'grafik' arbeiten.

                                                MfG
                                                bubble

                                                --
                                                If "god" had intended us to drink beer, he would have given us stomachs. - David Daye
                                                1. Jaaa! Es geht!!
                                                  Habe einfach JPanel panel = new Linien(); gelöscht und das panel durch grafik erzeugt!!!
                                                  Es funktioniert!! :-)

                                                  1000000 Dank für deine Hilfe!!! Darauf  wäre ich nie und nimmer gekommen! Ich habe jetzt schon viel dazu gelernt durch deine Hilfe! Danke! :-)

                                                  Gruß

                              3. Hi,

                                public Linien grafik;

                                [...]

                                  final JPanel panel = new  Grafik();  
                                

                                Die Variable, die ein Linien-Objekt referenziert, heißt also grafik.
                                Während die, die ein Grafik-Objekt referenziert, panel heißt.

                                Klingt irgendwie nach Verwirrungstaktik.

                                  		grafik.d= ((JSlider)arg0.getSource()).getValue();  
                                

                                Es hat nirgendwo eine Zuweisung ( a la
                                grafik = new Grafik();
                                oder
                                grafik = panel;
                                oder ...
                                an grafik stattgefunden.

                                Also MUSS es hier zu einer NullPointerException kommen.

                                Aber das hatten wir ja schon früher mit der Variable sliderkreis (oder war's slider?) ...

                                Habe mal alles als Final initialisiert.

                                Eine Variable als final zu deklarieren, hat NICHTS mit einer Initialisierung (= erste Wertzuweisung) zu tun. Es bedeutet, daß der Variablen genau einmal während ihrer Lebensdauer ein Wert zugewiesen werden kann.
                                final blindlings in der Gegend zu verteilen, ist sicher keine zielführende Strategie.

                                Leider immer noch die NullPointerException bei grafik.d=....

                                Solange Du die Ursache nicht beseitigst ...
                                Du mußt die Variablen initialisieren, bevor Du auf deren Member zugreifen kannst.

                                cu,
                                Andreas

                                --
                                Warum nennt sich Andreas hier MudGuard?
                                O o ostern ...
                                Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.