Java Applet - Layout - ActionListener

jonttu

Cadet 4th Year
Registriert
März 2009
Beiträge
108
Hallo,

Ich hab ein Applet programmiert, dass eine menge Werte per TextField bzw Checkbox empfängt und daraus nach klicken auf einen Button Werte berechnet. Nun werden alle TextFields und Checkbox's entfernt und ein Label mit den gewünschten Werten angezeigt. Außerdem soll hier ein Reset - Button sein sodass man wieder von vorne anfangen kann. Funktionierte auch alles prima.

Jetzt wollte ich das Layout noch auf "Vordermann" bringen und hab dazu den Layout-manager per: this.setLayout(null); deaktiviert und auf einmal funktioniert mein Reset - Button nicht mehr. Kann mir jemand ein paar tips geben auf was ich achten muss in bezug auch ActionListener wenn ich das Layout selbst machen will? Oder andere Kommentare weil ich irgendwas falsch/ungeschickt/oder sonstwie komisch gemacht hab?

danke schonmal.

Hier noch ein Auszug aus dem Javacode:


Code:
	public void init() {
		this.resize(600, 400);
		addComponents();
		calculate.addActionListener(new calculateAction());
		//reset.addActionListener(new resetAction());
		
		initCircuitResistance();
		initTempRating();
		initEnvironmental();
		initFailureRate();
		initCapFixedStyle();
		
	}


	private void addComponents() {
		this.setLayout(null);
		capFixedStyle.setBounds(100, 20, 300, 15);
		tempRating.setBounds(100, 50, 300, 15);
		failureRate.setBounds(100, 75, 300, 15);
		environmental.setBounds(100, 100, 300, 15);
		circuitResistance.setBounds(100, 125, 300, 15);
		capacitance.setBounds(100, 150, 300, 15);
		maxAmbTemp.setBounds(100, 175, 300, 15);
		ratVolt.setBounds(100, 200, 300, 15);
		appVolt.setBounds(100, 225, 300, 15);
		calculate.setBounds(100, 250, 100, 30);
		
		add(capFixedStyle);
		add(tempRating);
		add(failureRate);
		add(environmental);
		add(circuitResistance);
		add(capacitance);
		add(maxAmbTemp);
		add(ratVolt);
		add(appVolt);
		add(calculate);
		
		validate();
	}
	
	class resetAction implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			removeAll();
			capacitance.setText("capacitance");
			maxAmbTemp.setText("MaxAmbTemp");
			ratVolt.setText("ratVolt");
			appVolt.setText("appVolt");
			addComponents();
			validate();
			repaint();
		}
	}
	
	class calculateAction implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			
			removeAll();
			String result = CalculateClass.calculate(failureRate.getSelectedIndex(), capFixedStyle.getSelectedIndex(), ratVolt.getText(), appVolt.getText(), capacitance.getText(), maxAmbTemp.getText());
			Label label = new Label(result);
			label.setBounds(100, 100, 300, 300);
			reset.setBounds(250, 350, 100, 30);
			
			add(label);
			add(reset);
			reset.addActionListener(new resetAction());
			doLayout();
			validate();
			repaint();
			
		}
	}
 
Die Layout-Manager haben schon ihren Sinn und Zweck. Keinen zu verwenden, hat mit auf Vordermann bringen nicht viel zu tun. Falls dir die vorgefertigten nicht zusagen, kannst du dir z.B. mal MiG Layout anschauen.
 
Ich versteh zwar immernoch nicht was das Layout mit der funktionsweise meines Buttons zutun hat aber ich werd mir die verschiedenen Layouts nochmal anschauen, irgendwas halbwegs brauchbares wird sich da schon finden.

Danke für deine Antwort werd mir der Mig Layout auch mal anschauen.
 
Wird denn die resetAction denn eigentlich ausgeführt? Was sagt denn der Debugger?


Zum Thema LayoutManager:
Diese sind dafür da, dass eine GUI sich automatisch an unterschiedliche Fenstergrößen anpassen kann. Zudem erspart man sich das pixelgenaue Ausrichten der GUI-Elemente.


Was mir noch auffällt:
revalidate() und repaint() in die addComponents-Methode packen, dann ersparst du dir das im Rest des Quelltextes.

Ich hätte auch den Programmablauf anders gestaltet. ZB abhängig von den zu berechnenden Dingen (CalculateClass.calculate()) würde ich Threads einsetzen, damit die GUI nicht blockiert.
 
Zurück
Oben