wie wird GridBagLayout inaktiv?

Status
Nicht offen für weitere Antworten.

julchen81

Bekanntes Mitglied
Hallo!

Ich habe ein GridBagLayout erstellt, das u.a. einen Button mit der Aufschrift "Klick" enthält.
Wird jetzt auf diesen Klick-Button gedrückt, öffnet sich ein neues GridBagLayout, das einen Hinweis sowie ebenfalls einen Button enthält, diesmal mit der Aufschrift "OK". Wird nun auf diesen OK-Button gedrückt, beende ich mit system.exit(0); mein Programm.

Wie kann ich vermeiden, dass nach dem Klicken auf den Klick-Button dieser weiterhin gekickt werden kann? Ich möchte also nach dem Öffnen des zweiten GridBagLayouts, dass das erste inaktiv (ich glaube so nennt man das) wird.

Jemand einen Tipp? 😀

Liebe Grüße,
Julia
 
Das funktioniert auch - wenn ich unmittelbar nach dem Event buttonKlick.setEnabeld(false); setze.

Bei mir ist das aber so:
wenn ich auf meinen Klick-Button klicke, wird eine Methode aus einer anderen Klasse aufgerufen (diese Methode liest zeilen aus einer Datei).

Ich kann so oft auf Klick-Button klicken, bis die letzte Zeile gelesen worden ist. Ist das Dateiende erreicht, öffnet sich ein Hinweis mit dem OK-Button. Erst dann soll mein Klick-Button inaktiv werden.

Ob jetzt der Klick-Button inaktiv werden soll, oder nicht, entscheidet sich also nicht unmittelbar nach dem Event, sondern erst, wenn mit Hilfe der anderen Klasse festgestellt worden ist, dass das Dateiende erreicht worden ist.

Hier die Methode aus der anderen Klasse, die beim Klicken auf Klick-Button ausgelöst wird:

Code:
    BufferedReader br = null;
    BufferedWriter bw = null;
    String zeile = "";
    String sX = "";
    String sY = "";

    public void readInputRow() throws IOException {
		Layout lo = new Layout(this);                //Klasse mit dem Klick-Button
			
		while (null != (zeile = br.readLine())) {
			
			if ((sX == "") && (0 <= zeile.indexOf("X"))) {
				sX = zeile.substring(zeile.indexOf("X") + 1, zeile.indexOf("Y"));
			}
			if ((sY == "") && (0 <= zeile.indexOf("Y"))) {
				sY = zeile.substring(zeile.indexOf("Y") + 1, zeile.length());
			}
			if (0 <= zeile.indexOf("M99")) {
				
				lo.setVisible(true);
				lo.setLocation(700, 300);
				lo.paint(sX, sY);
				return;
			}
		}
		bw.flush();
		bw.close();
		Ende end = new Ende();
		end.setVisible(true);
		end.setLocation(300, 300);
      lo.btKlick.setEnabled(false);
		
	}

Ende ist die Klasse, die das GridLayout mit dem Hinweis und dem OK-Button erzeugt.
In der letzten Zeile hätte ich nun den Klick-Button mit setEnabled(false) inaktiv machen wollen, aber funktioniert nicht :cry:

Noch irgendwer einen Tipp?

Liebe Grüße,
Julia
 
Hallo Julia,

laß der Methode einen boolschen Wert zurückgeben.

also boolean test = readInputRow();

if(!test){
buttonKlick.setEnabled(false);
}

Grüße Oli
 
Guten Morgen!

Das hatte ich schon gemacht:
in der Klasse mit meiner readInputRow-Methode eine bool-Variable definiert:
boolean isfinished = false;

Dann die readInputRow-Methode wie folgt geändert:

Code:
		bw.flush();
		bw.close();
		isfinished = true;                  //Variable auf true
		Ende end = new Ende();
		end.setVisible(true);
		end.setLocation(300, 300);

und in meiner Klasse, die den Klick-Button beinhaltet die actionPerformed so abgeändert:

Code:
    public void actionPerformed(ActionEvent e){
		if (e.getSource() == btOK)
			getParams();
		try {
			if (oF.isfinished == false) {
				oF.readInputRow();
			} else {
				btKlick.setEnabled(false);
			}
		} catch (IOException ioex) {
			System.out.println("hier in actionPerformed");
		}
	}

Aber dann wird der Button einen Klick zu spät inaktiv! :?

Julia
 
Hallo,

Naja das ist ja logisch. Deswegen sagte ich ja du sollst es mit einem boolschen Rückgabewert machen.

if(!oF.readInputRow()){
btKlick.setEnabled(false);
}

Grüße Oli
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben