JLabel durch Klick auf JButton einblenden

stylegangsta

Bekanntes Mitglied
Hi,

ich habe einen JFrame, dieser enthält einen Button, der bereits MouseEvents (geklickt, nicht geklickt usw.) hat. Und ich habe ein JLabel, dass ein animiertes gif enthält.

Java:
    private JLabel lblAnimation;
    private Icon iconAnimation;
.
.
.
getContentPane().add(lblAnimation);
.
.
.
// Animation
        iconAnimation = new ImageIcon(getClass().getResource("/img/DB-Einlesen.gif"));
        lblAnimation = new JLabel(iconAnimation);
        lblAnimation.setBounds(460, 229, 350, 80);

So erscheint das JLabel die ganze Zeit, aber ich möchte, dass es erst nach Klick auf den Button erscheint. Was muss ich machen?
 

VfL_Freak

Top Contributor

stylegangsta

Bekanntes Mitglied
Moin,

na sicher, da fügst es ja auch immer zum ContentPane hinzu!


Erstell einen Button mit zugehörigem ActionListener, in dem Du dann erst das Label einblendest !

Gruß Klaus

Hi Klaus,

danke für die Antwort. Das habe ich schon versucht. Ich habe für das JLabel eine eigene Klasse erstellt, die den Actionlistener implementiert. Diesen habe ich dann in den Frame eingebaut mit der Variable vom Button. Hat aber nicht geklappt. Danach habe ich es wieder gelöscht. Also kein Code zur Verfügung leider.

Ich weiß aber noch, dass ich die Klasse so erstellt hatte.

public class Animation extends JLabel implements ActionListener {
 

Joose

Top Contributor
Da verstehe ich die Logik nicht. Ein ActionListener soll auf eine Aktion reagieren. Du willst darauf reagieren wenn der Button geklickt wird. Aber fügst den ActionListener an dein Label?
Probier das ganze vielleicht mal umgekehrt (aber bitte nicht unbedingt eine eigene Klasse deswegen)
 

stylegangsta

Bekanntes Mitglied
Da verstehe ich die Logik nicht. Ein ActionListener soll auf eine Aktion reagieren. Du willst darauf reagieren wenn der Button geklickt wird. Aber fügst den ActionListener an dein Label?
Probier das ganze vielleicht mal umgekehrt (aber bitte nicht unbedingt eine eigene Klasse deswegen)

Weil die Buttons keine eigene Klasse haben. Siehe Problem anderer Thread von mir indem du mir versuchst zu helfen, ich aber leider nichts blicke
 

Joose

Top Contributor
Stichwort anonyme (innere) Klassen
Java:
JButton button = new JButton("");
button.addActionListener(newActionListener() {
    publicvoid actionPerformed(ActionEvent arg0) {
        // Dein Code um auf ein Event wie einen Button Klick zu reagieren
    }
});

Wie jetzt schon in anderem Thread erwähnt: Da fehlen einfach die Grundlagen für OOP, welche für GUI-Programmierung unerlässlich sind.
 

stylegangsta

Bekanntes Mitglied
Moin,

wie jetzt ?? :confused:
Was genau ist denn "JButton" für Dich ????

Gruß Klaus

EDIT: war wohl zu langsam :rolleyes:

Das hier: (notwendiges Zubehör oberhalb im Code, steht hier jetzt nicht)
EDIT: Ist im JFrame rein geschrieben
Java:
btnTh = new JButton();
        btnTh.addMouseListener(new MouseEventTh(btnTh));
        btnTh.setContentAreaFilled(false);
        btnTh.setIcon(new ImageIcon(Th_Wappen));
        btnTh.setFocusPainted(false);
        lblTh = new JLabel("Th\u00FCringen");
        lblTh.setFont(lblTh.getFont().deriveFont(Font.BOLD, 15));
        lblTh.setForeground(Color.BLACK);
        lblTh.setHorizontalAlignment(SwingConstants.CENTER);
        lblTh.setVerticalAlignment(SwingConstants.CENTER);
        lblTh.setBounds(1060, 386, 110, 140);
        btnTh.setBounds(1060, 306, 110, 140);

Und das die dazugehörigen Events der Mouse
Java:
package MouseEvents;

import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.AbstractButton;
import javax.swing.BorderFactory;
import javax.swing.UIManager;

public class MouseEventTh extends MouseAdapter {

    private final AbstractButton btnTh;

    public MouseEventTh(AbstractButton btnTh) {
        this.btnTh = btnTh;
    }

    // Mauszeiger innerhalb der Schaltfläche
    public void mouseEntered(MouseEvent evtTh) {
        btnTh.setBorderPainted(true);
        btnTh.setBorder(BorderFactory.createEtchedBorder(Color.decode("38091"), Color.decode("38091")));
        btnTh.setOpaque(true);
        btnTh.setContentAreaFilled(false);
        btnTh.setBackground(Color.WHITE);
    }

    // Mauszeiger klickt auf Schaltfläche
    public void mousePressed(MouseEvent evtTh) {
        btnTh.setBorderPainted(false);
        btnTh.setBorder(BorderFactory.createEtchedBorder(Color.decode("38091"), Color.decode("38091")));
        btnTh.setOpaque(true);
        btnTh.setContentAreaFilled(false);
        btnTh.setFocusPainted(false);
        btnTh.setBackground(Color.WHITE);
    }

    // Mauszeiger klickt nicht mehr auf Schaltfläche
    public void mouseReleased(MouseEvent evtTh) {
        btnTh.setBorderPainted(true);
        btnTh.setBorder(BorderFactory.createEtchedBorder(Color.decode("38091"), Color.decode("38091")));
        btnTh.setOpaque(true);
        btnTh.setContentAreaFilled(false);
        btnTh.setBackground(Color.WHITE);
    }

    // Mauszeiger außerhalb der Schaltfläche
    public void mouseExited(MouseEvent evtTh) {
        btnTh.setBorderPainted(false);
        btnTh.setOpaque(false);
        btnTh.setContentAreaFilled(false);
        btnTh.setFocusPainted(false);
        btnTh.setBackground(UIManager.getColor("control"));
    }
}
 

stylegangsta

Bekanntes Mitglied

VfL_Freak

Top Contributor
Moin,
Das, was für mich ein JButton ist oder wie ich diesen erstelle.
Was ich andeuten wollte war, dass 'JButton' eine Java-Standardklasse ist!!

Also musst Du nur ein entsprechendes Objekt erstellen und nicht wild neue Klassen erfinden (es sei denn, dass Du die Standardfunktionalität eines Button wirklich erweitern willst)!

Vlt. hilft Dir dies ja weiter:
http://docs.oracle.com/javase/7/docs/api/javax/swing/JButton.html
https://docs.oracle.com/javase/tutorial/uiswing/components/button.html

Gruß Klaus
 

stylegangsta

Bekanntes Mitglied
Moin,

Was ich andeuten wollte war, dass 'JButton' eine Java-Standardklasse ist!!

Also musst Du nur ein entsprechendes Objekt erstellen und nicht wild neue Klassen erfinden (es sei denn, dass Du die Standardfunktionalität eines Button wirklich erweitern willst)!

Vlt. hilft Dir dies ja weiter:
http://docs.oracle.com/javase/7/docs/api/javax/swing/JButton.html
https://docs.oracle.com/javase/tutorial/uiswing/components/button.html

Gruß Klaus
Bitte nicht persönlich nehmen, war wohl eher ein Zufall mit deiner Frage im Eifer des Gefechts. Wolltest dich wahrscheinlich einfach nur kurz fassen.
Aber genau das ist Problem, was wir als Gruppe seit 1 Jahr mit unserem dämlichen Dozenten haben. Nicht nur bei JAVA war es so, überall. Datenbanken, Projekte etc. Die Erklärungen waren genauso wie die Fragestellungen.
 

VfL_Freak

Top Contributor
Moin,

Bitte nicht persönlich nehmen ... Aber genau das ist Problem, was wir als Gruppe seit 1 Jahr mit unserem dämlichen Dozenten haben. Nicht nur bei JAVA war es so, überall. Datenbanken, Projekte etc. Die Erklärungen waren genauso wie die Fragestellungen.
Nein, persönlich nehme ich das natürlich nicht ...
Aber ihr wisst nach einem Jahr noch nicht, was die Klasse 'JButton' ist und wie man sie richtig verwendet ?? :eek:
Selbst wenn euer Dozent nicht der Beste ist, gibt es genügend Lehrbücher, Seiten im Web, Tutorials etc., mit denen man sich die Grundlagen aneignen kann!!

Also schau Dir noch mal den Code im Beitrag von Joose an, da steht alles drin !!
Gruß Klaus
 

stylegangsta

Bekanntes Mitglied
Moin,

Aber ihr wisst nach einem Jahr noch nicht, was die Klasse 'JButton' ist und wie man sie richtig verwendet ?? :eek:
Gruß Klaus
Hab mich da jetzt wohl selber etwas zu kurz gefasst. Wir hatten 6 Monate JAVA Grundlagen, wo Übungsaufgaben aus Herdt Büchern bekommen haben und GUI haben wir gar nicht gemacht. Werden wir auch nicht. Ich meinte nur über das Jahr verteilt alle Themen. SQL, Projektmanagement, Sortieralgorithmen usw.
 

Joose

Top Contributor
Bei den Buttons haben wir ja schon geklärt hier brauchst du einfach eine Methode und nicht für jedes Bundesland eine eigene Klasse welche von JButton ableitet.
Ähnlich verhält es sich nun bei den MouseEvents. Ich nehme stark an das jede dieser MouseEventKlasse in den 4 Methoden 1:1 das gleiche macht.
-> Sprich anstatt hier wieder für jede Bundesland eine eigene Klasse machen reicht eine vollkommen aus.

Java:
public class BundeslandButtonMouseEvent extends MouseAdapter {

  private final AbstractButton button;

  public BundeslandButtonMouseEvent(AbstractButton button) {
  this.button = button;
  }

  // Mauszeiger innerhalb der Schaltfläche
  public void mouseEntered(MouseEvent evtTh) {
  button.setBorderPainted(true);
  button.setBorder(BorderFactory.createEtchedBorder(Color.decode("38091"), Color.decode("38091")));
  button.setOpaque(true);
  button.setContentAreaFilled(false);
  button.setBackground(Color.WHITE);
  }

...........
}

In deinem JFrame wo du die Button erzeugst hättest du dann folgenden Code
Java:
public JButton getBundeslandButton(String bundeslandName, .....) {
  try {
  Wappen = ImageIO.read(getClass().getResource("/img/" + bundeslandName + ".png"));
  } catch (IOException ex) {
  System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik konnte nicht gelesen werden!");
  ex.printStackTrace();
  } catch (IllegalArgumentException ex) {
  System.out.println("Ausnahmefehler beim Laden einer Grafik!\nEine Grafik wurde nicht gefunden!");
  ex.printStackTrace();
  }
  JButton bundesland = new JButton();
  bundesland.addMouseListener(new BundeslandButtonMouseEvent(bundesland)); // aus der Methode rausziehen? Per reflection laden > "MouseEvent"  + bundeslandName?
  bundesland.setContentAreaFilled(false);
  bundesland.setIcon(new ImageIcon(Wappen));
  bundesland.setFocusPainted(false);
  bundesland.setBounds(.......);
  return bundesland;
}

public JLabel getBundeslandLabel(String bundeslandName, ....) {
  JLabel bundesland = new JLabel(bundeslandName);
  bundesland.setFont(bundesland.getFont().deriveFont(Font.BOLD, 15));
  bundesland.setForeground(Color.BLACK);
  bundesland.setHorizontalAlignment(SwingConstants.CENTER);
  bundesland.setVerticalAlignment(SwingConstants.CENTER);
  bundesland.setBounds(........);
}

Und an der Codestelle wo du dein Fenster aufbaust und Button und Labels zum Frame oder Panel hinzufügen willst reichen folgende Aufrufe:

Java:
panel.add(getBundeslandButton("Bayern", .....));
panel.add(getBundeslandLabel("Bayern", .....));
 

stylegangsta

Bekanntes Mitglied
Ich nehme stark an das jede dieser MouseEventKlasse in den 4 Methoden 1:1 das gleiche macht.
-> Sprich anstatt hier wieder für jede Bundesland eine eigene Klasse machen reicht eine vollkommen aus.
Volltreffer, versenkt.

EDIT: Vom Prinzip ja, habe aber vergessen zu schreiben, dass jeder Button eine andere Hintergrundfarbe und anderen Rahmen bekommt, also angepasst an die Farben des Wappen vom jeweiligen Bundesland.

-------------------------------------------------------------------

Habe aber ein größeres Problem. Das Ganze hat einen SplashScreen beim Start. Funktioniert auf meinen Rechnern hier zu Hause wunderbar ohne was einzustellen. Aber auf keinem Rechner in der Schule, besser gesagt nur beim ersten Mal, unabhängig ob self executable jar oder konsole in eclipse.

Das heißt: Ich deinstalliere jdk und jre. Installiere es neu. Dann erscheint der SplashScreen, sowohl in der jar, als auch Konsole. Beim zweiten Starten nicht mehr. Irgendeine Idee?
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Inhalt von JTextField durch Klick auf JButton in JLabel anzeigen lassen AWT, Swing, JavaFX & SWT 8
D Swing keine JLabel-Aktualisierung bei "externem" Aufruf durch Helferklasse AWT, Swing, JavaFX & SWT 10
A Minimalestopuhr: JLabel.setText() durch eigenes Event ändern AWT, Swing, JavaFX & SWT 6
B Keine Änderungen an JLabel durch Array möglich AWT, Swing, JavaFX & SWT 12
J MouseEvts durch JLabel fallen lassen aber trotzdem Tooltips? AWT, Swing, JavaFX & SWT 5
J Im JLabel Bild durch anderes ersetzen, ohne dass es 'blinkt' AWT, Swing, JavaFX & SWT 12
T JLabel neuzeichnen nach überdecken durch andere Fenster AWT, Swing, JavaFX & SWT 5
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
C Swing Übergabe von String an JLabel AWT, Swing, JavaFX & SWT 9
H Swing Anpassen der Textgröße im JLabel funktioniert nur bedingt AWT, Swing, JavaFX & SWT 7
Mojo7310 Ändern von Text in JLabel mit einem Button AWT, Swing, JavaFX & SWT 11
raeuchertofu Text von JTextfield und JLabel ändern AWT, Swing, JavaFX & SWT 2
D JLabel übereinanderlegen AWT, Swing, JavaFX & SWT 5
E JLabel kopieren AWT, Swing, JavaFX & SWT 31
R Text vom Jlabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
kodela HTML-tags für JLabel AWT, Swing, JavaFX & SWT 9
J Swing JLabel Verknüpfung aktualisieren AWT, Swing, JavaFX & SWT 3
L Swing JLabel wird beim ändern der Schriftart immer neu gezeichnet. AWT, Swing, JavaFX & SWT 2
F JLabel mit ImageIcon per Button bewegen AWT, Swing, JavaFX & SWT 4
H String teilen, damit bei JLabel keine Punkte am Ende angezeigt werden AWT, Swing, JavaFX & SWT 4
S Swing JLabel Text mit der Zeit ändern AWT, Swing, JavaFX & SWT 1
E JLabel AWT, Swing, JavaFX & SWT 1
K JLabel mit Bilder im nicht initialisierten JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
I JLabel neue Zeile AWT, Swing, JavaFX & SWT 4
L JLabel ist verzerrt/größer als eingestellt AWT, Swing, JavaFX & SWT 15
B Observer Pattern JLabel ändern AWT, Swing, JavaFX & SWT 7
R Kann JLabel in ActionListener nicht aufrufen AWT, Swing, JavaFX & SWT 4
E Wie kann ich ein JLabel auf größe der schriftlänge setzten? AWT, Swing, JavaFX & SWT 2
xYurisha JLabel Text einer geöffneten Gui über eine andere Klasse ändern! AWT, Swing, JavaFX & SWT 3
D zwei JLabel stapeln in einem JPanel AWT, Swing, JavaFX & SWT 5
BreakdownBob Swing JLabel verschwindet hinter Image AWT, Swing, JavaFX & SWT 2
L Kalendar als JLabel einfügen AWT, Swing, JavaFX & SWT 3
stroggi Swing Mehrere transparentes Objekte (Grafiken) über einem Bild (JLabel) darstellen AWT, Swing, JavaFX & SWT 4
it_is_all jLabel.setText -> Char in Str: NullpointerException AWT, Swing, JavaFX & SWT 1
4 Swing JLabel wird ,,abgehackt" AWT, Swing, JavaFX & SWT 3
it_is_all JLabel.setIcon - funktioniert nicht mehr AWT, Swing, JavaFX & SWT 2
P Aktualisierung von jLabel in jFrames AWT, Swing, JavaFX & SWT 8
DaCrazyJavaExpert Swing JLabel Klickanimation AWT, Swing, JavaFX & SWT 4
A Swing JLabel als Parameter übergeben AWT, Swing, JavaFX & SWT 9
M JLabel ausrichten AWT, Swing, JavaFX & SWT 2
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
Z jLabel von Methode aus aktualisieren AWT, Swing, JavaFX & SWT 7
T JLabel Textinhalt von Oben anzeigen AWT, Swing, JavaFX & SWT 1
N JLabel in JTabbedPane verschieben AWT, Swing, JavaFX & SWT 2
N JLabel ändern während Programm ausgeführt wird AWT, Swing, JavaFX & SWT 4
R Swing JLabel berührung an einem anderen Label prüfen AWT, Swing, JavaFX & SWT 3
Thallius Swing "..." beim JLabel verhindern? AWT, Swing, JavaFX & SWT 3
OlafHD JLabel im JFrame Zentrieren AWT, Swing, JavaFX & SWT 2
T Event Handling JLabel als eigener Button AWT, Swing, JavaFX & SWT 7
T JLabel wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
KilledByCheese Swing 2D JLabel Array Maze zeichnen AWT, Swing, JavaFX & SWT 2
F Abgeleitetes JLabel AWT, Swing, JavaFX & SWT 16
S jLabel HTML Formatierung AWT, Swing, JavaFX & SWT 2
J Statisches JLabel adden AWT, Swing, JavaFX & SWT 4
J JLabel Visible setzen in KeyListener AWT, Swing, JavaFX & SWT 13
T JLabel in die Mitte(JLabel.CENTER geht nicht) AWT, Swing, JavaFX & SWT 12
2 JLabel - setText ändert den Text nicht AWT, Swing, JavaFX & SWT 4
B Jlabel Text von anderen Klasse aus ändern AWT, Swing, JavaFX & SWT 9
stylegangsta JLabel anzuzeigenden Text zentrieren AWT, Swing, JavaFX & SWT 9
K Swing unterschied JTextField und JLabel AWT, Swing, JavaFX & SWT 7
F Swing JLabel in JFrame anpassen AWT, Swing, JavaFX & SWT 20
E JLabel aus Runnable ändern AWT, Swing, JavaFX & SWT 2
Z AWT JLabel setzt kein neuen Text AWT, Swing, JavaFX & SWT 6
D JLabel bei Aufruf neue Zeile AWT, Swing, JavaFX & SWT 5
W Swing JLabel jede Sekunde aktualisieren, ohne Timer zu benutzen AWT, Swing, JavaFX & SWT 4
F ListCellRenderer mit JLabel und MouseListener AWT, Swing, JavaFX & SWT 4
F Swing JLabel wird nicht sofort Angezeigt AWT, Swing, JavaFX & SWT 3
D Timer für Bildfolge in einem jLabel AWT, Swing, JavaFX & SWT 5
S JLabel-Text in Methode setzen? AWT, Swing, JavaFX & SWT 2
GreyFox JLabel in laufender Anwendung erzeugen AWT, Swing, JavaFX & SWT 6
H Position eines JLabel in einem JPanel AWT, Swing, JavaFX & SWT 2
Z Auf ein JLabel drauf malen? AWT, Swing, JavaFX & SWT 1
S JLabel in den Vordergrund rücken AWT, Swing, JavaFX & SWT 1
A JLabel hochzählen lassen. AWT, Swing, JavaFX & SWT 6
S JLabel mit ImageIcon, komischer Rahmen? AWT, Swing, JavaFX & SWT 2
I Swing JLabel Bild für 1sec anzeigen lassen AWT, Swing, JavaFX & SWT 13
S JLabel anordnen AWT, Swing, JavaFX & SWT 2
J ungewollt-automatische Größenänderung von JLabel AWT, Swing, JavaFX & SWT 5
H AWT Fenster- und JLabel-Größe automatisch anpassen AWT, Swing, JavaFX & SWT 2
L 2D-Grafik PNG Datei in JLabel Array Problem AWT, Swing, JavaFX & SWT 4
S Swing Exception in thread "AWT-EventQueue-0" bei Jlabel AWT, Swing, JavaFX & SWT 4
B Swing JLabel und LayoutManager AWT, Swing, JavaFX & SWT 20
M Bild aus JLabel resizen und speichern AWT, Swing, JavaFX & SWT 0
A Swing JLabel/JTextField Inhalt mit JSlider verändern AWT, Swing, JavaFX & SWT 12
O Statusleiste mit JLabel aktualisieren AWT, Swing, JavaFX & SWT 5
G jLabel aus anderem Fenster ändern AWT, Swing, JavaFX & SWT 7
T JLabel Nullpunkt verschieben AWT, Swing, JavaFX & SWT 6
F Swing JPanel mit JLabel spinnt? AWT, Swing, JavaFX & SWT 2
M Massenweise JLabel ? oder ? AWT, Swing, JavaFX & SWT 3
J JLabel während einer methode aktualisieren AWT, Swing, JavaFX & SWT 6
R AWT JLabel oder JButton aktualisieren AWT, Swing, JavaFX & SWT 1
N JLabel HTML mit custom Font AWT, Swing, JavaFX & SWT 0
V JLabel bzw. GUI aus externen Thread ansteuern AWT, Swing, JavaFX & SWT 3
G JLabel verdeckt AWT, Swing, JavaFX & SWT 12
A JLabel zeichendicke einstellen AWT, Swing, JavaFX & SWT 3
B Repaint auf JFrame, JLabel und ImageIcon AWT, Swing, JavaFX & SWT 4
S JLabel zeigt ImageIcon nicht AWT, Swing, JavaFX & SWT 13
S jLabel / jText beim starten ausblenden AWT, Swing, JavaFX & SWT 2
A Array von JLabel mit Grafiken anzeigen AWT, Swing, JavaFX & SWT 3
T Swing HTML Text aus JLabel ohne "HTML-Tags" in String einlesen AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Neue Themen


Oben