Initialisierung + alte Werte

Status
Nicht offen für weitere Antworten.

granini

Bekanntes Mitglied
Hallo,

irgendwie fehlt mir gerade der Durchblick. In meinem Fall initialisiere ich die Variablen in einem Konstruktor, so wie unten im Beispiel. Wenn ich nun im Menü Test aufrufe sollte das Programm mir die Oberfläche meines Erachtens neu darstellen. Aber er überschreibt nur die alten Werte. Sprich sehe ich zwar die Zahl 0, aber dahinter noch den alten Wert der Variablen. Wieso, und wie kann ich das verhindern?


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


class Test5 extends JFrame {

    JFrame frame = new JFrame("Test");


   public void testWindow(){

      JMenuBar menubar = new JMenuBar();
      JMenu test = new JMenu("Test");
      JMenuItem test2 = new JMenuItem("TestStart");
      test.add(test2);
      menubar.add(test);

      test2.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e){
            test2ActionPerformed(frame);
         }
      });
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setJMenuBar(menubar);
      frame.setSize(100,100);
      frame.setVisible(true);
   }
   public void test2ActionPerformed(JFrame f){
      TestFenster abfrage = new TestFenster();
      abfrage.start(f);
      f.validate();
   }
}


class TestFenster extends Test5 {
     WeitereKlasse weitereKlasse = new WeitereKlasse();
     public TestFenster(){
              weitereKlasse.int = 0;
              weitereKlasse.int2 = 0;
     }
     public void start(JFrame f){
     f.add(new JButton("Aufschrift")); 
           setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           setSize(200,200);
           setVisible(true);
           //es wird im Weiteren mit int gearbeitet...
   }
}


public class MainTest {
   public static void main(String[] args) {
      Test5 test = new Test5();
      test.testWindow();
   }
}
 
du hast am Anfang ein Fenster:
JFrame frame = new JFrame("Test");


bei jedem Buttonklick erzeugst du ein neues Fenster TestFenster
und zeigst dieses an, in start(JFrame f) ist das setVisible(true);

also wenn du das zweite Fenster nicht anzeigen willst, dann tue es einfach nicht?!
 
Hmm, ich gebe zu das dieses Beispiel ein wenig komplex ist für die Frage, und daher eventuell verwirrend, habe es auch mal etwas unkommentiert.
Mir geht es aber eigentlich "nur" um die Variable int + int2, welche ich im Verlauf des Programms bearbeite und beim erneuten Klick auf Test im Menü einfach auf 0 gesetzt haben will. Zur Zeit werden die Werte bei mir nur sichtbar mit 0 überschreiben.
 
> einfach auf 0 gesetzt haben will
+
> Zur Zeit werden die Werte bei mir nur sichtbar mit 0 überschreiben.

definiere bitte den Unterschied zwischen 'auf 0 setzen' und 'sichtbar mit 0 überschreiben'..

das TestFenster und damit das WeitereKlasse-Objekt wird in diesem Beispiel doch erst beim Button-Klick erzeugt,
du bearbeitest also keine vorhandenen Objekte

außerdem werden die beiden ints (eh falsche Syntax) im Programm nirgendwo verwendet,
WeitereKlasse ist nicht näher definiert

du hast keinen Code und (noch) keine korrekte Problembeschreibung -> ich habe noch keine Antwort 😉
 
Funktionierender Code:
Code:
class Test extends JFrame {

	JFrame frame = new JFrame("Test");

	public void testWindow() {

		JMenuBar menubar = new JMenuBar();
		JMenu test = new JMenu("Test");
		JMenuItem test2 = new JMenuItem("TestStart");
		test.add(test2);
		menubar.add(test);

		test2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				test2ActionPerformed(frame);
			}

		});
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setJMenuBar(menubar);
		frame.setSize(300, 300);
		frame.setVisible(true);
	}

	public void test2ActionPerformed(JFrame f) {
		TestFenster abfrage = new TestFenster();
		f.add(abfrage);
		f.validate();
	}
}

class TestFenster extends JComponent {

	WeitereKlasse weitereKlasse = new WeitereKlasse();

	public TestFenster() {
		weitereKlasse.test = 0;
		weitereKlasse.test2 = 0;
	}

	public void start(JFrame f) {
		setSize(400, 400);
		setVisible(true);
	}

	public void paint(Graphics g) {
		Graphics2D g2D = (Graphics2D) g;
		
		g2D.drawString("Test:" + weitereKlasse.test, 50, 50);
		g2D.drawString("Test2:" + weitereKlasse.test2, 100, 50);
		weitereKlasse.method();
	}

	protected void paintComponent(Graphics g) {
		super.paintComponent(g);

		paint(g);

	}
}
public class WeitereKlasse {
	int test;
	int test2;
	
	public void method(){
		test = 7;
		test2 = 9;
	}
}


Wenn ich jetzt Test im Menü aufrufe soll er mir eigentlich die alten Werte mit der Zahl null ersetzen, was für mich zurücksetzen gleich kommt. Er überschreibt aber nur die Werte, sprich sehe ich zwar die Zahl 0, aber dahinter noch den alten Wert der Variablen.
Und das will ich doch verhindern.
 
verwende
f.getContentPane().removeAll();
f.add(abfrage);

wenn du das vorherige TestFenster entfernen willst, damit nicht beide gezeichnet werden
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben