JButton nach Klick ausblenden

_12Thesaurus

Mitglied
Hallo Java-Freunde,

ich bin ein absoluter Java Neuling und wollte mir die Grundlagen eigentlich im Selbststudium mit dem Buch "Programmieren lernen mit Java" von Hans-Peter Habelitz beibringen, aber bei den graphischen Oberflächen arbeitet das Buch mit Jigloo, welches anscheinend zum download nicht mehr zur Verfügung steht. Die GUIS (?) erzeuge ich nun mit dem WindowBuilder von Eclipse, aber die Befehle aus dem Buch kann ich nicht 1 zu 1 übernehmen (oder ich bin zu blöd dafür). Ich habe jetzt das Problem, dass ich ein JButton nach betätigen von diesem verschwinden lassen wollte. Das funktioniert aber nicht und ich weiß nicht warum. Ich habe mal ein Minimalbeispiel geschrieben (dabei ist mir wichtig, dass das Verschwinden in einer Methode passiert). Ich habe in der Methode "verschwinde()" einige Befehle reingeschrieben, die ich schon probiert habe.
Falls der Code "schlechten Stil" enthält, weist mich gern darauf hin.

Im Voraus schon mal Danke!
LG

Java:
package gui;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class test extends JFrame {

	public JPanel contentPane;
	public JButton btn_verschwinde;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					test frame = new test();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public test() {
		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);
		
		JButton btn_verschwinde = new JButton("Klick mich");
		btn_verschwinde.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				verschwinde();
			}
		});
		btn_verschwinde.setBounds(170, 83, 119, 23);
 		contentPane.add(btn_verschwinde);
		btn_verschwinde.setVisible(true);
		
		
	}
	
	public void verschwinde() {
		contentPane.remove(btn_verschwinde);
		contentPane.repaint();
		btn_verschwinde.setVisible(false);
	}
}
 

kaoZ

Top Contributor
Tip Nr. 1 :

- Finger weg von Gui Buildern, solange keine Verständnis für Layoutmanager / API vorliegt.

Tip Nr. 2 :

- Blende den Button doch einfach aus ?! und bei bedarf einfach wieder ein

Tip Nr. 3 :

- Gewöhne dir an möglichst in einer Sprache zu programmieren, vorzugsweise in der, welche auch in den API's
verwendet wird, sprich Englisch.

Tip Nr. 4 :

- Gewöhne dir garnicht erst an NULL Layouts zu verwenden, ausser wenn wirklich kein Layoutmanager deine erwartungen erfüllt,
Code:
contentPane.setLayout(null);
Null-Layouts sind starr und unflexibel, dann nimm dir lieber die Zeit und arbeite dich
vernünftig in die Grundlegenden Manager ein ;)

Java:
import java.awt.Dimension;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Foo extends JPanel{

	JButton btn;
	
	public Foo(){
		setPreferredSize(new Dimension(250,250));
		btn = new JButton("Klick mich");
		add(btn);
		btn.addActionListener(e -> btn.setVisible(false));  // Java 8 (Lambda) <<--
	}
	
	public static void main(String[] args){
		JFrame f = new JFrame();
		f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		f.setContentPane(new Foo());
		f.pack();
		f.setLocationRelativeTo(null);
		f.setVisible(true);
	}
}

Gehe hier nochmal schritt für schritt durch und überlege warum das nicht funktionieren könnte :

Java:
contentPane.remove(btn_verschwinde);  // <<-- Tip
contentPane.repaint();
btn_verschwinde.setVisible(false);
 
Zuletzt bearbeitet:

_12Thesaurus

Mitglied
Hi kaoZ,

danke für deine ausführliche Antwort.
Dein Beispielcode konnte ich leider nicht starten, weil ich anscheinend Java 1.7 verwende.

Allgemein zu deinen Anmerkungen: Wie ich schon schrieb, arbeite ich mich durch das Buch durch und muss zunächst darauf vertrauen, dass der Autor schon weiß, wovon er spricht (ich kann die Qualität des Buches als Neuling ja nicht beurteilen) und wenn im Buch nun die Builder behandelt werden, dann geh ich davon aus, dass man das mit dem vorher erarbeiteten Wissen auch tun kann. Es ist nun ja nicht so, dass ich die vorherigen Kapitel übersprungen hätte. Die NULL Layouts sind auch nicht auf meinem Mist gewachsen, sondern stammen aus dem Buch (der Autor hat dazu nur angemerkt, dass die Bedeutung von NULL an dieser Stelle später behandelt wird und es was mit der "Reihenfolge" bzw. Priorität der Fenster zu tun hat).
Jetzt noch etwas spezieller zu
Tip Nr. 2:
Ich dachte ja, dass ich das mit btn_verschwinde.setVisible(false) einfach tue, weil es so in der Musterlösung vom Buch steht.
Tip Nr. 3:
Stimmt natürlich und ich hatte ja auch ausdrücklich darauf hingewiesen, mich auf schlechten Stil aufmerksam zu machen.
Tip Nr. 4:
Was meinst du genau damit, dass ich mich in die grundlegenden Manager einarbeiten soll? Ist mit Manager z.B. der WindowBuilder gemeint?
Bei deinem Tip ich solle mir die Zeile
contentPane.remove(btn_verschwinde);
noch mal genauer ansehen, steh ich total auf dem Schlauch. Zugegebenermaßen habe ich das auch nur deswegen ausprobiert, weil ich das auf der Suche im Netz nach einer Lösung irgendwo gelesen habe und unreflektiert übernommen habe.

LG
 

Foxei

Bekanntes Mitglied
Layout Manager sind Fenster Layouts die Automatisch für dich die Componenten an die Richtige stelle rücken. Java selber stellt einige von Haus aus zur Verfügung.
https://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html

Zu deinem Verschwinde Button mit
Java:
setVisible(false)
wird der Button unsichtbar. Wenn das deine einzige Intention ist ist diese Lösung vollkommen ausreichend.

Allerdings muss ich kaoZ zustimmen das ein Absolutes Layout nur im absolut letzten Fall eingesetzt wird.
Zum Code von kaoZ unter Java 7 sieht er so aus:
Java:
import java.awt.Dimension;
	import javax.swing.JButton;
	import javax.swing.JFrame;
	import javax.swing.JPanel;
	 
	public class Foo extends JPanel{
	 
		JButton btn;
	 
		public Foo(){
			setPreferredSize(new Dimension(250,250));
			btn = new JButton("Klick mich");
			add(btn);
			btn.addActionListener(new ActionListener() {
				
				@Override
				public void actionPerformed(ActionEvent arg0) {
					btn.setVisible(false);
				}
			}); 
		}
	 
		public static void main(String[] args){
			JFrame f = new JFrame();
			f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
			f.setContentPane(new Foo());
			f.pack();
			f.setLocationRelativeTo(null);
			f.setVisible(true);
		}
	}
 

_12Thesaurus

Mitglied
Hallo Foxei,

danke für die Aufklärung mit dem Manager.

Deinen geänderten Programmcode kann ich mit Eclipse nicht starten. Die erste Fehlermeldung von Eclipse kommt schon in Zeile 6 mit "The serializable class does not declare a static final serialVersionUID field". Nach Einfügen von
Java:
private static final long serialVersionUID = 1L;
ist dieser Fehler zwar weg, aber dann sind noch Fehlermeldungen in Zeile 14 und 17. Aber eigentlich will ich ja keinen anderen Code haben, der das tut, was meiner tun soll, sondern wissen, warum meiner nicht das tut, was er tun soll.

Du schreibst mit
Java:
 setVisible(false);
verschwindet der Button. Aber genau das steht doch in meinem Code. Der Button verschwindet aber gerade nicht. Ich kann das Programm ausführen und auf den Button klicken und er ist immer noch da.
Vielleicht hätte ich schon in meinem ersten Post die folgende Meldung aus der Console posten sollen:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at gui.test.verschwinde(test.java:60)
at gui.test$2.actionPerformed(test.java:49)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(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.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.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)

LG
 
Zuletzt bearbeitet:

Foxei

Bekanntes Mitglied
Ach so :D das ist ganz einfach du initialisierst deine Button Variable nicht. Dadurch das du schreibst
Java:
JButton btn_verschwinden=new JButton();
beschränkt sich dieser JButton auf die Methode in diesem fall kannst du den Button nur aus dem Konstruktor ansteuern. Um deine Variabele die Oben steht zu initialisieren muss es nur
Java:
btn_verschwinden=new JButton();
heißen.
Dein Code in funktionierend wäre so:
Java:
package gui;

import java.awt.BorderLayout;
import java.awt.EventQueue;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
 
public class test extends JFrame {
 
	public JPanel contentPane;
	public JButton btn_verschwinde;
 
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					test frame = new test();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}
 
	/**
	 * Create the frame.
	 */
	public test() {
		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);
 
		btn_verschwinde = new JButton("Klick mich");
		btn_verschwinde.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				verschwinde();
			}
		});
		btn_verschwinde.setBounds(170, 83, 119, 23);
 		contentPane.add(btn_verschwinde);
		btn_verschwinde.setVisible(true);
 
 
	}
 
	public void verschwinde() {
		contentPane.remove(btn_verschwinde);
		contentPane.repaint();
		btn_verschwinde.setVisible(false);
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Swing Änderung des ActionListener Events nach Klick auf JButton AWT, Swing, JavaFX & SWT 2
M Ausgabe nach Klick auf JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 6
J jButton soll nach klicken eine Variable um 1 erhöhen AWT, Swing, JavaFX & SWT 2
S Swing JButton verschwindet nach Compilieren AWT, Swing, JavaFX & SWT 8
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2
R JButton -> erst sichtbar nach rollover AWT, Swing, JavaFX & SWT 9
T Kuchendiagramm - mit paintComponent nach JButton druck zeich AWT, Swing, JavaFX & SWT 4
G JButton mit importFiles-Funktion auf JDrawPane AWT, Swing, JavaFX & SWT 5
B JButton Search AWT, Swing, JavaFX & SWT 8
B Swing JButton mit KeyListener AWT, Swing, JavaFX & SWT 3
L JButton durch Mausklick auslösen und Enter-Taste AWT, Swing, JavaFX & SWT 2
N Erlennen ob JButton gedrückt ist AWT, Swing, JavaFX & SWT 6
D JButton Form verändern AWT, Swing, JavaFX & SWT 4
R Grafik per JButton laden und austauschen lassen AWT, Swing, JavaFX & SWT 14
SvenPittelkow Programm soll auf JButton warten bis der geklickt wurde AWT, Swing, JavaFX & SWT 1
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
Z Swing Drag and Drop mit einem JButton AWT, Swing, JavaFX & SWT 1
Z Swing Kann man auf JButton zeichenen AWT, Swing, JavaFX & SWT 3
J JButton Icon hinzufügen AWT, Swing, JavaFX & SWT 5
U Swing JButton mit Icon AWT, Swing, JavaFX & SWT 7
ms_cikar Jbutton erzeugt neue Buttons AWT, Swing, JavaFX & SWT 2
Drachenbauer Swing Wie ändere ich die Farbe der Konturen von jButton und jCombobox? AWT, Swing, JavaFX & SWT 18
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
A Swing JButton mit Pfeiltasten bewegen AWT, Swing, JavaFX & SWT 6
F Swing Scrollbare Liste von JButton AWT, Swing, JavaFX & SWT 4
Hatsi09 JButton text layout AWT, Swing, JavaFX & SWT 9
J JButton zum ändern Der Schriftart/Schriftgröße AWT, Swing, JavaFX & SWT 2
A Swing JButton aussehen AWT, Swing, JavaFX & SWT 12
Legi Swing JButton Icon verschiebt sich AWT, Swing, JavaFX & SWT 2
B Swing Posistion von JButton auslesen gibt immer 0 aus AWT, Swing, JavaFX & SWT 1
J Thread kennt JButton nicht. AWT, Swing, JavaFX & SWT 11
G Swing JButton ändert (unerwünscht) Größe bei Ausführung AWT, Swing, JavaFX & SWT 4
MR._FIRE_Flower Variable setzten mit JButton AWT, Swing, JavaFX & SWT 5
S Mit JButton neues Fester öffnen und das alte schließen AWT, Swing, JavaFX & SWT 3
T JButton wird beim vergrößern des Fensters erst sichtbar AWT, Swing, JavaFX & SWT 4
R Swing Verändern der Ausrichtung JButton und neu anzeigen AWT, Swing, JavaFX & SWT 2
G Swing JButton - Keine Klickanimation AWT, Swing, JavaFX & SWT 4
Joker4632 JButton nicht sichtbar, aber funktionsfähig AWT, Swing, JavaFX & SWT 8
B Swing JButton deaktivieren, wenn nicht alle JTextFields ausgefüllt sind. AWT, Swing, JavaFX & SWT 2
D JButton per Tastenkombi auswählen AWT, Swing, JavaFX & SWT 2
K JButton nicht sichtbar machen für User 2 AWT, Swing, JavaFX & SWT 4
L Swing JButton soll link öffnen AWT, Swing, JavaFX & SWT 1
K JButton auf anderer Klasse AWT, Swing, JavaFX & SWT 6
A JButton soll durch anklicken die Farbe wechseln AWT, Swing, JavaFX & SWT 8
T KeyListener funktioniert nicht wenn ich ein JButton hinzufüge AWT, Swing, JavaFX & SWT 1
R Swing ActionListener bei JButton AWT, Swing, JavaFX & SWT 9
B JButton -> Rahmen wegbekommen AWT, Swing, JavaFX & SWT 7
N JButton über benutzerdefinierte paintComponent setzen AWT, Swing, JavaFX & SWT 3
T JButton überlagern sich und werden erst beim Mausscrollen sichtbar AWT, Swing, JavaFX & SWT 2
B JButton erscheint in JFrame, obwohl er diesem nicht zugeordnet wurde! AWT, Swing, JavaFX & SWT 1
M JButton Probleme AWT, Swing, JavaFX & SWT 14
T Klasse über JButton schließen AWT, Swing, JavaFX & SWT 4
M Textfarbe JButton verändern AWT, Swing, JavaFX & SWT 2
N JButton ausblenden AWT, Swing, JavaFX & SWT 2
M Swing jButton Text verschwindet AWT, Swing, JavaFX & SWT 2
C Swing JButton wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
stylegangsta JLabel durch Klick auf JButton einblenden AWT, Swing, JavaFX & SWT 16
stylegangsta Eigene Klasse für JButton aus dem JFrame abrufen AWT, Swing, JavaFX & SWT 29
stylegangsta MouseEvents aus JButton aufrufen AWT, Swing, JavaFX & SWT 3
stylegangsta JButton Transparent anzeigen AWT, Swing, JavaFX & SWT 9
stylegangsta JButton Fehelr javax.swing.ImageIcon.<init>(Unknown Source) AWT, Swing, JavaFX & SWT 24
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
S JButton-Label vergrößern AWT, Swing, JavaFX & SWT 2
J Swing Basics - JButton funktioniert nicht. AWT, Swing, JavaFX & SWT 1
L JButton mit ImageIcon/Fehlermeldung AWT, Swing, JavaFX & SWT 1
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
L Array mit JButton, wie rausfinden auf welche JButton geklickt wurde + index des JButtons ausgeben AWT, Swing, JavaFX & SWT 4
K (GUI) JButton Farbe bei druck ändern AWT, Swing, JavaFX & SWT 3
L JButton mit Image AWT, Swing, JavaFX & SWT 5
fLooojava JButton [Focus) AWT, Swing, JavaFX & SWT 4
M JButton - Listener AWT, Swing, JavaFX & SWT 1
D jButton auf von jFrame erzeugtem jDialog AWT, Swing, JavaFX & SWT 16
L JButton flackern - Programm hängt sich auf AWT, Swing, JavaFX & SWT 3
L JButton - Größe anders als erwartet AWT, Swing, JavaFX & SWT 2
X Swing 1 JButton bedeckt meine ganze Frame aber Warum? AWT, Swing, JavaFX & SWT 2
S Größe und Farbe vom JButton festlegen AWT, Swing, JavaFX & SWT 2
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
J JButton neu zeichnen lassen AWT, Swing, JavaFX & SWT 9
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
HoloYoitsu Swing JButton in verschiedenen Winkeln drehen AWT, Swing, JavaFX & SWT 0
J vocab1 = new JButton(""+voc1.get(nr).toString()+""); AWT, Swing, JavaFX & SWT 16
A JButton wird bei ActionListener nicht "angenommen" AWT, Swing, JavaFX & SWT 7
BRoll JButton Text nicht ausblenden ("...") AWT, Swing, JavaFX & SWT 2
I JFrame mit JButton schließen? AWT, Swing, JavaFX & SWT 0
J Swing JFrame slideout, wenn JButton gedrückt wurde AWT, Swing, JavaFX & SWT 0
S Swing Rückmeldung für JButton AWT, Swing, JavaFX & SWT 4
R AWT JLabel oder JButton aktualisieren AWT, Swing, JavaFX & SWT 1
L JButton im Frame fest verankern AWT, Swing, JavaFX & SWT 0
M Swing Mix JComboBox - JButton? AWT, Swing, JavaFX & SWT 6
U Event Handling JButton Actionevent: starte Spiel AWT, Swing, JavaFX & SWT 4
E JButton füllt ganzes JPanel auf AWT, Swing, JavaFX & SWT 6
P Verbuggte custom JButton unter Windows AWT, Swing, JavaFX & SWT 9
W Swing JButton lässt sich nicht anzeigen AWT, Swing, JavaFX & SWT 8
Kandum Swing JButton - onclick -> Grafikfehler AWT, Swing, JavaFX & SWT 2
R JButton durch Enter auslösen AWT, Swing, JavaFX & SWT 7
T Swing JButton per Drag&Drop verschieben AWT, Swing, JavaFX & SWT 5
M Problem mit FlowLayout, JLabel und JButton AWT, Swing, JavaFX & SWT 4
M JButton wird von JTree überdeckt AWT, Swing, JavaFX & SWT 4
D Swing JButton.setenabled(true) funktioniert nicht AWT, Swing, JavaFX & SWT 12

Ähnliche Java Themen

Neue Themen


Oben